sql >> Databasteknik >  >> NoSQL >> Redis

Hur man hanterar användar- och socketpar med node.js + redis

En mer elegant lösning skulle vara att få varje uttag att ansluta till kanalens användar-ID, till exempel:

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

Det finns två saker du måste ta hand om här:

  1. Se till att endast användar-ID kan ansluta till hans kanal, så verifiera sessionen (läs mer här:http://www.danielbaulig.de/socket-ioexpress/ )
  2. Vid anslutning öka värdet för användar-ID i redis (så att du vet att en ny anslutning för den användaren lyssnar) och vid frånkoppling minska användar-ID-värdet (så att du vet antalet anslutningar som fortfarande lyssnar). Om värdet är 0 skickar du ett meddelande till chatten om att användar-ID har lämnats (eftersom antalet anslutningar som lyssnar på användar-ID-kanalen är 0).

När andra användare vill skicka ett meddelande till användar-ID, behöver de inte ansluta till användar-ID-kanalen, de kan skicka ett meddelande till chat kanal och skicka användar-ID som en egenskap. Till exempel:

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. Rails Resque ändra arbetargräns?

  2. Hur man distribuerar MongoDB på Heroku

  3. Hur kan jag bygga ett program med c++ drivrutinen för mongodb?

  4. Ta reda på om en fråga använder ett index i MongoDB