So entfernen Sie Redis bei 'Nachrichten'-Listenern
Ein typisches Redis-Chat-Beispiel sieht ungefähr so aus (siehehttps://github.com/emrahayanoglu/Socket.io-Redis-RealTime-Chat-Example/blob/master/chatServer.js für nur ein Beispiel):
io.sockets.on('connection', function (client) { //websocket connection
redis1.subscribe("chat");
redis1.on("message", function(channel, message) {
console.log(message);
client.send(message);
});
client.on('message', function(msg) {
redis2.publish("chat",msg.message);
});
client.on('disconnect', function() {
redis1.quit();
});
});
Das Problem hierbei ist jedoch, dass wenn aclient
'trennen', dieredis1.on('message',FUNC(){})
Hörer ist noch angehängt. Die Konsole druckt weiterhin diemessage
. Wenn man die Eventlistener vonredis1
würde sie trotzdem die anonyme funktion hören finden.
Das Problem ist, dass es keine gibtredis1.off(...)
Funktion. Also, wie kann man den Redis Message Listener entbinden / abbestellen / löschen / entfernen?
Hinweis: Man kann nicht einfach redis1.end () ausführen, da dies die Redis-Verbindung für andere mit dem Websocket verbundene Benutzer unterbricht.