Отписаться от Rethink DB Внешняя функция в Node.JS
Я использую Socket.io и Rethink DB для передачи данных в реальном времени на Node.js. Подписка на поток работает, но когда пользователь отключается, я могу понять, как отписаться от переосмысления БД.
Вот мой код:
Часть 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});
}
});
});
});
};
Итак, как я могу остановить подписку (connection.stop()), когда вызывается socket.on('connect')? Вероятно, простое решение, так как я совершенно новичок в узле и JS.
1 ответ
Вы можете иметь более одного прослушивателя событий, поэтому в своем курсоре вы добавите прослушиватель событий отключения, который может вызывать 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();
});
});