2013-06-19 42 views
5

工作,我有别人谁使用连接Redis的一个简单的问题。连接,Redis的店不socket.io

我想与功能io.set('store', something)与socket.io使用它。 我不知道为什么,当我做

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'

回答

8

connect-redis是连接/ Express中的Redis支持会话存储,但它是不符合的“保存协议”是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() 
})); 

docs

+1

谢谢!我很害怕,因为我认为我必须要创建第二组的pub/sub /客户端,一个用于socket.io和一个快递的。现在我看到'新的RedisSessionStore'接受一个redis客户端作为选项。 – Jakub

+0

这是否意味着该线之上变种RedisSessionStore =要求(“连接-redis的”)(表达);应该从app.js文件中删除,或者只是重命名变量以创建io.set部分?并且如果该var将被删除,那么您将上面的快速会话存储为什么? – Lion789