2013-06-19 9 views
5

Ho una domanda facile per qualcuno che usa i redis di connessione.Lo store Connect-redis non funziona con socket.io

Voglio usarlo con socket.io con la funzione io.set('store', something). Non so il motivo per cui, quando faccio

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

Si dice Object #<RedisStore> has no method 'subscribe'

risposta

8

connect-redis è un negozio di sessione di Redis-backed per Connect/Express, ma è incompatibile con il 'negozio protocollo' che socket.io usi .

Invece, è necessario utilizzare l'implementazione Redis negozio fornito con 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

Grazie! Avevo paura perché pensavo di dover creare un secondo set di pub/sub/client, uno per socket.io e uno per express. Ora vedo che il 'nuovo RedisSessionStore' accetta un client redis come opzione. – Jakub

+0

Significa che questa riga sopra var RedisSessionStore = require ('connect-redis') (express); dovrebbe essere rimosso dal file app.js o semplicemente rinominare la variabile per creare la parte io.set? e se la var deve essere rimossa, cosa memorizzi la sessione espressa sopra come? – Lion789