2013-06-19 60 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