sql >> データベース >  >> NoSQL >> Redis

redis、express、socket.ioを使用してセッションを機能させるにはどうすればよいですか?

    io.configure内 、ソケットをhttpセッションにリンクする必要があります。

    これがCookieを抽出するコードです(これはxhr-pollingでsocket.ioを使用しています 、これが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. Redisアクティブ-アクティブレプリケーション

    3. phpRedisのクラスターへの移行とコンシステントハッシュ

    4. あなたのビジネスに最適なMongoDBホスティングを選択する方法