sql >> Base de Datos >  >> NoSQL >> Redis

Ejemplos de uso de RedisStore en socket.io

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

La diferencia es que cuando se usa 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. Uso de RedisStore , su mensaje se publicará en un servidor redis, al que están suscritos todos sus trabajadores. 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 y crear su propio cliente redis y configurar/obtener sus propios datos?

No estoy muy familiarizado con RedisStore , por lo que no estoy seguro de todas las diferencias. Pero hacerlo uno 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 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 similar:

// 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 usted mismo debe encargarse del enrutamiento de mensajes más avanzado, por ejemplo, publicando/suscribiéndose a diferentes canales. Con RedisStore , obtiene esa funcionalidad de forma gratuita mediante el uso de canales socket.io (io.sockets.of("channel").emit(...) ).

Un gran inconveniente potencial de esto es que las sesiones de socket.io no se comparten entre los trabajadores. Esto probablemente traerá problemas si usa cualquiera de los transportes de sondeo largo.