2016-06-23 3 views
0

Ich versuche, eine Nachricht in einen socket.io Raum mit socket.io-mongodb-emitter zu emittieren. Mein Problem ist, dass mein Skript nie existiert, weil es eine Verbindung zu mongodb lebendig hält.Schließen mubsub client nach dem Senden mit socket.io-mongodb-emitter

Bitte überprüfen Sie meine Beispiele unten, und geben Sie mir einen Rat, wie kann ich das Skript schließen mongodb Verbindung und lassen Sie sich selbst verlassen.

emitter.js Dieses Skript gibt die Nachricht aus, der Client erhält sie, aber der Prozess wird nicht beendet.

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

Emitter-2.js das Skript beendet, aber der Kunde bekommt nie die Nachricht.

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

Emitter-3.js dieses perfekt funktioniert, erhält der Client die Nachricht, und der Prozess beendet. Aber setTimeout ist eine extrem schlechte Lösung, es muss einen richtigen Weg geben, diesen Prozess von selbst zu beenden.

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

Antwort

1

Vielleicht einen Rückruf verwenden, um eine Bestätigung zu erhalten, dass der Client die Nachricht erhalten, rufen Sie dann die Schließfunktion

Server:

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

Client:

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

Sie müssen die .emit-Fähigkeit verwenden, um eine Bestätigung zu erhalten, dass die Nachricht gesendet wurde.

Sie wie folgt:

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

On Server müssen Sie die Funktion aufrufen, wenn es empfangen wird.

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

Dokumentation here