Cómo eliminar Redis en oyentes 'mensaje'
Un ejemplo típico de chat de Redis será algo como esto (verhttps://github.com/emrahayanoglu/Socket.io-Redis-RealTime-Chat-Example/blob/master/chatServer.js sólo para un ejemplo de este tipo):
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();
});
});
Sin embargo, el problema aquí es que cuando unclient
'desconectar', elredis1.on('message',FUNC(){})
El oyente todavía está adjunto. La consola continuará imprimiendo elmessage
. Si uno fuera a inspeccionar la lista de eventos deredis1
, todavía encontrarían la función anónima escuchando.
El problema es que no hayredis1.off(...)
función. Entonces, ¿cómo se puede desvincular / cancelar la suscripción / eliminar / eliminar la escucha de mensajes de redis?
Nota: Uno no puede simplemente hacer redis1.end (), ya que eso romperá la conexión de redis para otros usuarios conectados a websocket.