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.