Redis
 sql >> Database >  >> NoSQL >> Redis

Come gestire coppie di utenti e socket con node.js + redis

Una soluzione più elegante sarebbe quella di collegare ogni presa all'ID utente del canale, ad esempio:

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

Ci sono due cose di cui devi occuparti qui:

  1. Assicurati che solo userID possa connettersi al suo canale, quindi verifica la sessione (leggi di più qui:http://www.danielbaulig.de/socket-ioexpress/ )
  2. Alla connessione aumenta il valore di userID in redis (in modo da sapere che una nuova connessione per quell'utente è in ascolto) e alla disconnessione diminuisci il valore di userID (in modo da conoscere il numero di connessioni ancora in ascolto). Se il valore è 0, emetti un messaggio alla chat in cui si afferma che l'ID utente è uscito (poiché il numero di connessioni in ascolto del canale ID utente è 0).

Quando altri utenti vorranno inviare un messaggio a userID, non hanno bisogno di connettersi al canale userID, possono inviare un messaggio alla chat canale e passa l'ID utente come proprietà. Ad esempio:

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