2013-06-19 5 views
5

У меня есть простой вопрос для тех, кто использует connect-redis.Магазин Connect-redis не работает с socket.io

Я хочу использовать его с 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'

ответ

8

connect-redis является Redis спинок сессии магазина для Connect/Экспресса, но это несовместимо с «магазином протоколом», что 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/client, один для socket.io и один для express. Теперь я вижу, что «новый RedisSessionStore» принимает клиент redis в качестве опции. – Jakub

+0

Означает ли это, что эта строка над var RedisSessionStore = require ('connect-redis') (экспресс); следует удалить из файла app.js или просто переименовать переменную, чтобы создать часть io.set? и если var должен быть удален, что вы храните экспресс-сессию выше как? – Lion789

Смежные вопросы