Redis
 sql >> Base de données >  >> NoSQL >> Redis

Comment gérer les paires utilisateur et socket avec node.js + redis

Une solution plus élégante serait de faire en sorte que chaque socket se connecte à l'ID utilisateur du canal, par exemple :

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

Il y a deux choses dont vous devez vous occuper ici :

  1. Assurez-vous que seul l'ID utilisateur peut se connecter à son canal, vérifiez donc la session (en savoir plus ici :http://www.danielbaulig.de/socket-ioexpress/)
  2. A la connexion, augmentez la valeur de l'ID utilisateur dans redis (afin que vous sachiez qu'une nouvelle connexion pour cet utilisateur écoute) et à la déconnexion, diminuez la valeur de l'ID utilisateur (afin que vous connaissiez le nombre de connexions toujours à l'écoute). Si la valeur est 0, vous émettez un message sur le chat indiquant que l'ID utilisateur est parti (puisque le nombre de connexions écoutant le canal de l'ID utilisateur est 0).

Lorsque d'autres utilisateurs voudront envoyer un message à userID, ils n'ont pas besoin de se connecter au canal userID, ils peuvent envoyer un message au chat canal et transmettez l'ID utilisateur en tant que propriété. Par exemple :

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