Ich versuche, Nachricht von Redis Pubsub an Socket-Client mithilfe von Nodejs EventEmitter weiterzuleiten.socket.io-Verbindung besteht nach dem Trennen weiterhin
var events = require('events');
var subscriber = redis.createClient();
var app = express();
var localEmitter = new events.EventEmitter();
var server = require('http').createServer(app);
var io = require("socket.io")(server, {secure: 'true'});
io.on('connection', function (socket) {
localEmitter.on('FORWARDING', function(message)) {
console.log(socket.id + ': localEmitter is forwarding messages');
}
socket.on('disconnect', function(){
console.log(socket.id + ' disconnected);
})
};
subscriber.on('message', function (channel, message) {
console.log("Got message from redis");
localEmitter.emit('FORWARDING', encoded);
});
Aber wenn ich die Webseite, die websocket Verbindung trennt und verbindet aktualisieren, kann das disconnect
Verfahren ausgelöst werden, aber die localEmitter
noch Nachrichten über die alte Socket-ID weiterzuleiten.
Die Protokolle wie folgt aussehen:
pxw8pcocxI3O2ru3AAAA: localEmitter is forwarding message
0BX2bVYoAn2g2JtMAAAB: localEmitter is forwarding message
0BX2bVYoAn2g2JtMAAAB disconnected
pxw8pcocxI3O2ru3AAAA: localEmitter is forwarding message
0BX2bVYoAn2g2JtMAAAB: localEmitter is forwarding message
...
Sie tun es falsch, weil localEmitter immer auf den Emitter hört. Hier müssen Sie also die Anschlüsse verfolgen, die noch verbunden sind. –
@CharanjeetSingh Danke, gibt es eine Möglichkeit, die getrennten Sockets von localEmitter zu entfernen? – Yifei
Zuerst Bitte teilen Sie Ihr komplettes Problem –