使用socket.io-mongodb-emitter发射后关闭mubsub客户端

时间:2016-06-23 14:44:33

标签: javascript node.js mongodb sockets socket.io

我正在尝试使用socket.iosocket.io-mongodb-emitter会议室发送一些消息。我的问题是,我的脚本永远不存在,因为它保持与mongodb的连接。

请查看下面的示例,并给我一些建议,如何让脚本关闭mongodb连接并让自己退出。

emitter.js 此脚本会发出消息,客户端会获取该消息,但该进程不会退出。

var io = require('socket.io-mongodb-emitter')("mongodb://localhost:27017/test");
io.in('someRoom').emit('someMessage');

emitter-2.js 此脚本退出,但客户端永远不会收到消息。

var io = require('socket.io-mongodb-emitter')("mongodb://localhost:27017/test");
io.in('someRoom').emit('someMessage');
io.client.close();

emitter-3.js 这个工作正常,客户端获取消息,然后进程退出。但setTimeout是一个非常糟糕的解决方案,必须有一些正确的方法让这个过程自行退出。

var io = require('socket.io-mongodb-emitter')("mongodb://localhost:27017/test");
io.in('someRoom').emit('someMessage');
setTimeout(function () {
    io.client.close();
},100);

2 个答案:

答案 0 :(得分:1)

您需要使用.emit的功能来接收邮件已发送的确认。

这样做:

io.in('someRoom').emit('someMessage',function(){
    console.log('message was sent');
    io.client.close();
);

在服务器上,您需要在收到函数时调用该函数。

  socket.on('someMessage', function (name, fn) {
    fn('received');
  });

文档here

答案 1 :(得分:1)

可能使用回调来确认客户端收到消息,然后调用close函数

服务器:

var message = "hello";
io.in('someRoom').emit('someMessage', message, function(data){
    console.log(data);
    io.client.close();
});

客户端:

socket.on('someMessage', function(message, callback){
    // do something with message here
    callback('message received');
});