2016-06-23 41 views
0

我想用socket.io-mongodb-emitter发送一些消息到socket.io的房间。我的问题是,我的脚本从不存在,因为它保持与mongodb之间的连接。用socket.io-mongodb发射器发射后关闭mubsub客户端

请检查我的例子,并给我一些建议,我怎样才能使脚本关闭mongodb连接,让自己退出。

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

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

发射极2.js这个脚本退出,但是客户从来没有得到消息。

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

发射极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); 

回答

1

也许使用回调来获取客户端收到的消息的确认,然后调用关闭功能

服务器:

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'); 
}); 
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