Connect-redis存储不适用于socket.io

Jak*_*kub 6 javascript redis node.js socket.io

对于使用connect-redis的人,我有一个简单的问题.

我想将它与socket.io一起使用io.set('store', something).当我这样做时,我不知道为什么

var RedisSessionStore = require('connect-redis')(express);
var sessionStore = new RedisSessionStore();

app.use(express.session({
  secret: 'some totally secret key',
  cookie: {
    maxAge: 1000 * 60 * 60
  },
  store: sessionStore
}));

//and then I wan't to use the session store for socket.io
io.set('store', sessionStore);
Run Code Online (Sandbox Code Playgroud)

它说 Object #<RedisStore> has no method 'subscribe'

rob*_*lep 9

connect-redis是一个Redis支持的Connect/Express会话存储,但它与使用的"存储协议"不兼容socket.io.

相反,您需要使用附带的Redis商店实现socket.io:

var SocketIoRedisStore = require('socket.io/lib/stores/redis'),
    redis              = require('socket.io/node_modules/redis');
...
io.set('store', new SocketIoRedisStore({
  redisPub    : redis.createClient(),
  redisSub    : redis.createClient(),
  redisClient : redis.createClient()
}));
Run Code Online (Sandbox Code Playgroud)

(docs)