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

Cómo manejar pares de usuarios y sockets con node.js + redis

Una solución más elegante sería hacer que cada socket se conecte al ID de usuario del canal, por ejemplo:

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);

Hay dos cosas de las que debes ocuparte aquí:

  1. Asegúrese de que solo el ID de usuario pueda conectarse a su canal, por lo tanto, verifique la sesión (lea más aquí:http://www.danielbaulig.de/socket-ioexpress/)
  2. Al conectarse, aumente el valor de ID de usuario en Redis (para que sepa que hay una nueva conexión para ese usuario que está escuchando) y al desconectarse, disminuya el valor de ID de usuario (para saber la cantidad de conexiones que aún están escuchando). Si el valor es 0, emite un mensaje al chat que indica que el ID de usuario se ha ido (ya que la cantidad de conexiones que escuchan el canal de ID de usuario es 0).

Cuando otros usuarios quieran enviar un mensaje a ID de usuario, no necesitan conectarse al canal de ID de usuario, pueden enviar un mensaje al chat channel y pase el ID de usuario como una propiedad. Por ejemplo:

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);
    }
  });