Redis
 sql >> база данни >  >> NoSQL >> Redis

Как да работим с двойки потребител и сокет с node.js + redis

По-елегантно решение би било да накарате всеки сокет да се свързва с потребителския идентификатор на канала, например:

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

Тук трябва да се погрижите за две неща:

  1. Уверете се, че само userID може да се свърже с неговия канал, като по този начин потвърдете сесията (прочетете повече тук:http://www.danielbaulig.de/socket-ioexpress/)
  2. При свързване увеличете стойността за userID в redis (за да знаете, че нова връзка за този потребител слуша), а при прекъсване намалете стойността на userID (така че знаете броя на връзките, които все още слушат). Ако стойността е 0, тогава изпращате съобщение до чата, в което се посочва, че userID е напуснал (тъй като броят на връзките, слушащи канала на userID, е 0).

Когато други потребители искат да изпратят съобщение до userID, те не трябва да се свързват с потребителския канал, те могат да изпратят съобщение до chat канал и подайте userID като свойство. Например:

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. Как функционира ServiceStack Redis при извличане на данни

  2. Съхранение на вложени javascript обекти в redis - NodeJS

  3. Docker&Celery - ГРЕШКА:Pidfile (celerybeat.pid) вече съществува

  4. Конфигуриране на Apache Reverse Proxy за хостване на Laravel Echo Server при производство

  5. Определяне защо Redis получава SIGTERM на всяка минута или две