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

как мога да накарам сесиите да работят с помощта на redis, express &socket.io?

вътре в io.configure , трябва да свържете сокета с http сесията.

Ето част от кода, който извлича бисквитката (това се използва socket.io с xhr-polling , не знам дали това ще работи за websocket, въпреки че подозирам, че ще работи).

var cookie = require('cookie');
var connect = require('connect');

var sessionStore = new RedisStore({
  client: redis // the redis client
});

socketio.set('authorization', function(data, cb) {
  if (data.headers.cookie) {
    var sessionCookie = cookie.parse(data.headers.cookie);
    var sessionID = connect.utils.parseSignedCookie(sessionCookie['connect.sid'], secret);
    sessionStore.get(sessionID, function(err, session) {
      if (err || !session) {
        cb('Error', false);
      } else {
        data.session = session;
        data.sessionID = sessionID;
        cb(null, true);
      }
    });
  } else {
    cb('No cookie', false);
  }
});

След това можете да получите достъп до сесията, като използвате:

socket.on("selector", function(data, reply) {
  var session = this.handshake.session;
  ...
}

Това също има допълнителното предимство, че проверява дали има валидна сесия, така че само вашите влезли потребители могат да използват сокети. Можете обаче да използвате различна логика.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Асинхронно изпълнение на redis команди

  2. Как да премахнете Redis от слушателите на „съобщения“.

  3. Грешка в състоянието на сесията на Azure Redis Изчакване при изпълнение на EVAL, inst:1 , queue:2

  4. Как да кажа на клиент къде новият Redis master използва Sentinel

  5. не може да се свърже с Redis контейнер от контейнера на приложението