pero no entiendo cómo usar RedisStore en ese código sería diferente de usar MemoryStore. ¿Alguien puede explicar me lo?
La diferencia es que cuando se utiliza el valor predeterminado MemoryStore
, cualquier mensaje que emites en un trabajador sólo será enviado a los clientes conectados al mismo trabajador, ya que no hay IPC entre los trabajadores. Con el RedisStore
, su mensaje se publicará en un servidor redis al que se suscriben todos sus trabajadores. Por lo tanto, el mensaje será recogido y transmitido por todos los trabajadores y todos los clientes conectados.
¿Cuál es la diferencia entre configurar socket.io para usar redisstore vs. crear su propio cliente redis y establecer/obtener sus propios datos?
No estoy íntimamente familiarizado con RedisStore
, por lo que no estoy seguro de todas las diferencias. Pero hacerlo tú mismo sería una práctica perfectamente válida. En ese caso, podría publicar todos los mensajes en un servidor redis y escucharlos en su manejador de socket. Probablemente sea más trabajo para usted, pero también tendrá más control sobre cómo desea configurarlo. He hecho algo similar a mí mismo:
// Publishing a message somewhere
var pub = redis.createClient();
pub.publish("messages", JSON.stringify({type: "foo", content: "bar"}));
// Socket handler
io.sockets.on("connection", function(socket) {
var sub = redis.createClient();
sub.subscribe("messages");
sub.on("message", function(channel, message) {
socket.send(message);
});
socket.on("disconnect", function() {
sub.unsubscribe("messages");
sub.quit();
});
});
Esto también significa que tiene que cuidar de mensaje más avanzada de enrutamiento a sí mismo, por ejemplo, por la publicación/suscripción de diferentes canales. Con RedisStore
, obtienes esa funcionalidad gratis usando los canales socket.io (io.sockets.of("channel").emit(...)
).
Un inconveniente potencialmente grande con esto es que las sesiones de socket.io no se comparten entre los trabajadores. Esto probablemente significará problemas si usa cualquiera de los transportes de larga duración.
Aquí es [una sección de código usando RedisStore con el nodo] (http://www.ranu.com.ar/2011/11/redisstore-and-rooms-with-socketio.html) que puede resultar interesante; sin embargo, no habla de diferencias; Estaba, irónicamente, simplemente leyendo sobre este tema :) – Kato
Los enlaces para estos ya no funcionan =/ – qodeninja