Connect-Redis存储不适用于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); 

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

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

相反,您需要使用随socket.io一起提供的Redis存储实现:

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

( docs )