sql >> Databáze >  >> NoSQL >> Redis

jak mohu zajistit, aby relace fungovaly pomocí redis, express &socket.io?

uvnitř io.configure , musíte propojit soket s relací http.

Zde je část kódu, který extrahuje soubor cookie (Toto používá socket.io s xhr-polling , Nevím, jestli by to fungovalo pro websocket, i když mám podezření, že by to fungovalo).

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

Poté můžete přistupovat k relaci pomocí:

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

To má také další výhodu, že kontroluje, zda existuje platná relace, takže pouze vaši přihlášení uživatelé mohou používat sokety. Můžete však použít jinou logiku.



  1. Jak mohu napsat agregaci, aniž bych překročil maximální velikost dokumentu?

  2. Dotaz s formátem data řetězce v mongodb

  3. Jak používat jarní data mongo @CompoundIndex s dílčími kolekcemi?

  4. Skupinové pole po uvolnění a zápase