2013-06-19 16 views
5

Ich habe eine einfache Frage für jemanden, der Connect-Redis verwenden.Connect-Redis-Speicher funktioniert nicht mit socket.io

Ich möchte es mit socket.io mit der Funktion io.set('store', something) verwenden. Ich weiß nicht, warum, wenn ich

tun
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); 

Es sagt Object #<RedisStore> has no method 'subscribe'

Antwort

8

connect-redis ist ein Redis-backed Session-Speicher für Connect/Express, aber es ist nicht kompatibel mit dem 'Store-Protokoll', dass socket.io Anwendungen .

Stattdessen müssen Sie die Redis Store Implementierung mit socket.io ausgeliefert verwenden:

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

Vielen Dank! Ich hatte Angst, weil ich dachte, dass ich einen zweiten Satz von Pub/Sub/Client erstellen müsste, einen für socket.io und einen für express. Jetzt sehe ich, dass der 'neue RedisSessionStore' einen Redis Client als Option akzeptiert. – Jakub

+0

Bedeutet dies, dass diese Zeile über var RedisSessionStore = erfordert ('connect-redis') (express); sollte aus der Datei app.js entfernt werden oder einfach die Variable umbenennen, um den io.set-Teil zu erstellen? und wenn die Var entfernt werden soll, was speichern Sie die Express-Sitzung oben als? – Lion789