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

Como lidar com pares de usuário e soquete com node.js + redis


Uma solução mais elegante seria fazer com que cada socket se conectasse ao userID do canal, por exemplo:
io.sockets.on('connection', function (socket) {
  socket.join(userID);
});

// when you want somebody to send a message to userID you can do:
io.sockets.in(userID).emit(message);

Há duas coisas que você precisa cuidar aqui:
  1. Certifique-se de que apenas userID possa se conectar ao seu canal, portanto, verifique a sessão ( leia mais aqui:http://www.danielbaulig.de/socket-ioexpress/ )
  2. Na conexão, aumente o valor de userID em redis (para que você saiba que uma nova conexão para esse usuário está escutando) e na desconexão, diminua o valor de userID (para que você saiba o número de conexões que ainda estão escutando). Se o valor for 0, você emite uma mensagem para o chat informando que o userID saiu (já que o número de conexões que escutam o canal userID é 0).

Quando outros usuários quiserem enviar uma mensagem para userID, eles não precisam se conectar ao canal userID, eles podem enviar uma mensagem para o chat channel e passe userID como uma propriedade. Por exemplo:
var chat = io
  .of('/chat')
  .on('connection', function (socket) {
    // connected to public chat
  })
  .on('message', function (data) {
    if (data.userID && data.message) {
      io.sockets.in(userID).emit('UserX: ' + data.message);
    }
  });