gpt4 book ai didi

javascript - 取消订阅 Node.JS 中的 Rethink DB Outside 函数

转载 作者:太空宇宙 更新时间:2023-11-04 02:01:20 25 4
gpt4 key购买 nike

我使用 Socket.io 和 Rethink DB 在 Node.js 上推送实时数据。订阅流是有效的,但是当用户断开连接时,我可以弄清楚如何取消订阅 rethink 数据库。

这是我的代码:

app.js 的一部分:

// Adding socket.io
app.io = require('socket.io')();
var feed;
// On connection to the socket, just invoking the function.
app.io.on('connection',function(socket) {
console.log('Client connected...');
feed = require('./feed')(socket);
socket.on('disconnect', function() {
console.log('Got disconnect!');

# Here I'd like to unsubscribe

});
});

feed.js:

var r = require('rethinkdb');
var dbConfig = require('./config/database');
module.exports = function(socket) {
var connection = r.connect(dbConfig)
.then(function (connection) {

r.db('Minicall').table('Message').changes().run(connection,function(err,cursor) {
if(err) {
console.log(err);
}
cursor.each(function(err,row) {
console.log(JSON.stringify(row));
if(Object.keys(row).length > 0) {
console.log("send");
socket.emit("msgFeed",{"timestamp" : row.new_val.timestamp, "message" : row.new_val.message ,"ric" : row.new_val.ric});
}
});
});
});
};

那么,当调用 socket.on('disconnect') 时,如何停止订阅 (connection.stop()) ?可能是一个简单的解决方案,因为我对 Node 和 js 完全陌生。

最佳答案

一个事件可以有多个事件监听器,因此您将在光标中添加一个可以调用 cursor.close() 的断开连接事件监听器:

r.db('Minicall')
.table('Message')
.changes()
.run(connection, function(err, cursor) {
if(err) {
console.log(err);
}
cursor.each(function(err,row) {
console.log(JSON.stringify(row));
if(Object.keys(row).length > 0) {
console.log("send");
socket.emit("msgFeed",{"timestamp" : row.new_val.timestamp, "message" : row.new_val.message ,"ric" : row.new_val.ric});
}
});
socket.on('disconnect', function() {
cursor.close();
});
});

关于javascript - 取消订阅 Node.JS 中的 Rethink DB Outside 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45839858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com