Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Exemplos de uso do RedisStore no socket.io


mas não entendo como usar RedisStore nesse código seria diferente de usar MemoryStore. Alguém pode explicar isso para mim?

A diferença é que ao usar o padrão MemoryStore , qualquer mensagem que você emitir em um trabalhador só será enviada para clientes conectados ao mesmo trabalhador, pois não há IPC entre os trabalhadores. Usando o RedisStore , sua mensagem será publicada em um servidor redis, no qual todos os seus funcionários estão assinando. Assim, a mensagem será captada e difundida por todos os trabalhadores e todos os clientes conectados.

Além disso, qual é a diferença entre configurar o socket.io para usar redisstore vs. criar seu próprio cliente redis e definir/obter seus próprios dados?

Não estou familiarizado com o RedisStore , e por isso não tenho certeza sobre todas as diferenças. Mas fazer você mesmo seria uma prática perfeitamente válida. Nesse caso, você pode publicar todas as mensagens em um servidor redis e ouvi-las em seu manipulador de soquete. Provavelmente seria mais trabalhoso para você, mas você também teria mais controle sobre como deseja configurá-lo. Eu mesmo fiz 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();
  });
});

Isso também significa que você precisa cuidar do roteamento de mensagens mais avançado, por exemplo, publicando/assinando em diferentes canais. Com RedisStore , você obtém essa funcionalidade gratuitamente usando os canais socket.io (io.sockets.of("channel").emit(...) ).

Uma desvantagem potencialmente grande com isso é que as sessões do socket.io não são compartilhadas entre os trabalhadores. Isso provavelmente significará problemas se você usar qualquer um dos transportes de sondagem longa.