Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Jak obsługiwać pary użytkowników i gniazd za pomocą node.js + redis

Bardziej eleganckim rozwiązaniem byłoby połączenie każdego gniazda z identyfikatorem użytkownika kanału, na przykład:

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

Są dwie rzeczy, o które musisz zadbać:

  1. Upewnij się, że tylko ID użytkownika może połączyć się z jego kanałem, w ten sposób zweryfikuj sesję (czytaj więcej tutaj:http://www.danielbaulig.de/socket-ioexpress/ )
  2. Przy połączeniu zwiększ wartość userID w redis (aby wiedzieć, że nowe połączenie dla tego użytkownika nasłuchuje), a po rozłączeniu zmniejsz wartość userID (aby wiedzieć, ile połączeń wciąż nasłuchuje). Jeśli wartość wynosi 0, wtedy wysyłasz wiadomość na czacie stwierdzającą, że odszedł użytkownik o ID (ponieważ liczba połączeń nasłuchujących na kanale ID użytkownika wynosi 0).

Gdy inni użytkownicy będą chcieli wysłać wiadomość do userID, nie muszą łączyć się z kanałem userID, mogą wysłać wiadomość na chat kanał i przekaż identyfikator użytkownika jako właściwość. Na przykład:

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak uzyskać tę samą rangę za te same wyniki w ZRANK Redis?

  2. ServiceStack:Przywrócić potok podczas ręcznego wywoływania usługi?

  3. Subskrybenci i wydawcy Redis pub sub max

  4. Benchmark Couchbase ujawnia bardzo wolne INSERT i GET (przy użyciu operacji KeyValue); wolniej niż utrwalone dane MySQL

  5. Niestandardowe środowisko Railsowe Resque.enqueue nie tworzy zadań