node.js redis socket.io

node.js - Ejemplos en el uso de RedisStore en socket.io



(4)

Además, ¿cuál es la diferencia entre configurar socket.io para usar redisstore en lugar de crear su propio cliente redis y configurar / obtener sus propios datos?

La diferencia es que, cuando usa ''RedisStore'', el socket.io mismo guardará el latido del zócalo y la información de la sesión en el Redis, y si usa cluster con node.js, el cliente de usuario puede funcionar.

Sin redis, el cliente podría cambiar el proceso node.js la próxima vez, por lo que la sesión se perderá.

Estoy tratando de escalar una aplicación simple socket.io a través de múltiples procesos y / o servidores.

Socket.io es compatible con RedisStore, pero estoy confundido en cuanto a cómo usarlo.

Estoy mirando este ejemplo, http://www.ranu.com.ar/post/50418940422/redisstore-and-rooms-with-socket-io

pero no entiendo cómo usar RedisStore en ese código sería diferente a usar MemoryStore. ¿Alguien puede explicar me lo?

Además, ¿cuál es la diferencia entre configurar socket.io para usar redisstore en lugar de crear su propio cliente redis y configurar / obtener sus propios datos?

Soy nuevo en node.js, socket.io y redis, así que, señale si me he perdido algo obvio.


pero no entiendo cómo usar RedisStore en ese código sería diferente a usar MemoryStore. ¿Alguien puede explicar me lo?

La diferencia es que al usar el MemoryStore predeterminado, cualquier mensaje que emita en un trabajador solo se enviará a los clientes conectados al mismo trabajador, ya que no hay IPC entre los trabajadores. Al utilizar RedisStore , su mensaje se publicará en un servidor de redis, al que todos sus trabajadores se están suscribiendo. Por lo tanto, el mensaje será recogido y transmitido por todos los trabajadores y todos los clientes conectados.

Además, ¿cuál es la diferencia entre configurar socket.io para usar redisstore en lugar de crear su propio cliente redis y configurar / obtener sus propios datos?

No estoy familiarizado con RedisStore , y por eso no estoy seguro de todas las diferencias. Pero hacerlo tú mismo sería una práctica perfectamente válida. En ese caso, puede publicar todos los mensajes en un servidor redis y escucharlos en su controlador de socket. Probablemente sería más trabajo para usted, pero también tendría más control sobre cómo desea configurarlo. Yo mismo he hecho algo parecido:

// 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 debe encargarse de un enrutamiento de mensajes más avanzado, por ejemplo, publicando / suscribiéndose a diferentes canales. Con RedisStore , puede obtener esa funcionalidad de forma gratuita utilizando los canales io.sockets.of("channel").emit(...) ).

Un inconveniente potencialmente grande con esto es que las sesiones socket.io no se comparten entre los trabajadores. Esto probablemente significará problemas si utiliza alguno de los transportes de sondeo largo.



La diferencia es que, si tiene un clúster de instancias de node.js en ejecución, memStore no funcionará ya que solo es visible para un solo proceso.