sql >> Database >  >> NoSQL >> Redis

Hoe om te gaan met gebruikers- en socketparen met node.js + redis

Een elegantere oplossing zou zijn om elke socket te verbinden met de kanaalgebruikers-ID, bijvoorbeeld:

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

Er zijn twee dingen die u hier moet regelen:

  1. Zorg ervoor dat alleen gebruikers-ID verbinding kan maken met zijn kanaal, dus verifieer de sessie (lees hier meer:​​http://www.danielbaulig.de/socket-ioexpress/ )
  2. Verhoog bij verbinding de waarde voor userID in redis (zodat u weet dat een nieuwe verbinding voor die gebruiker luistert) en verlaag bij verbreken de waarde voor userID (zodat u weet hoeveel verbindingen nog luisteren). Als de waarde 0 is, stuur je een bericht naar de chat waarin staat dat userID is vertrokken (aangezien het aantal connecties dat naar het userID-kanaal luistert 0 is).

Wanneer andere gebruikers een bericht naar userID willen sturen, hoeven ze geen verbinding te maken met het userID-kanaal, ze kunnen een bericht sturen naar de chat kanaal en geef userID door als een eigenschap. Bijvoorbeeld:

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



  1. findOne Subdocument in Mongoose

  2. MongoDB / Pymongo-query met Datetime

  3. Hoe maak je verbinding met een replicaset vanuit een MongoDB-shell?

  4. Implementatie van goMongoDB-achtige Query-expressie-objectevaluatie