2016-06-23 74 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