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

como acessar a sessão de soquete em todos os clusters


O Socket.io-redis acompanha de certa forma.

De seus documentos

"O adaptador Redis estende a função de transmissão do adaptador na memória:o pacote também é publicado em um canal Redis (veja abaixo o formato do nome do canal).

Cada servidor Socket.IO recebe esse pacote e o transmite para sua própria lista de soquetes conectados."

Então, basicamente, redis é usado como o broker para dizer a cada servidor de soquete para emitir com base no canal X etc. rastrear coisas fora de apenas uma emissão.

Então, onde isso nos deixa .. Bem, você pode usar ganchos personalizados via socket.io-redis, mas pessoalmente achei muito difícil de entender e usar e tive sucesso limitado pessoalmente. Eu acho que com a nova versão do socket.io e socket.io redis houve alguns ajustes para tornar isso mais simples, mas eu não tentei.

Em vez disso, o que fazemos é usar redis hset e jget para armazenar o socket e um ID de um usuário, então quando queremos colocar todos os usuários online podemos consultar o redis para obter a lista de usuários online ou usuários em uma sala específica etc.

O que você deseja fazer é adicionar o pacote redis e conectar-se ao pub / sub regular.

Então, quando um usuário entrar em uma sala ou no seu servidor, você fará um hset. No primeiro join, o nosso se parece com isso
redis.hset([collection-name],[Field],[value])

Então no código parece
redis.hset(decoded.cID,"socket-" + socket.id,socket.nickname)

Isso definirá um valor em redis, então o nome da coleção é um valor (para nós, é um id exclusivo do canal), então armazenamos o 'socket.id' para o campo junto com um 'nick-name' para o valor. Este valor é o ID do usuário OU é anônimo se ele não estiver logado

Então, quando queremos pegar quem está em uma sala, usamos o comando hget
redis.HGETALL([collection-name],function(err,results){}

Então, dentro de, digamos, emit, chamamos o comando redis.HGETALL para obter todos os itens dentro de uma coleção específica que passamos e enviamos de volta para todos os usuários conectados.