2013-06-19 18 views
5

Connect-redis kullanan biri için kolay bir sorum var.Bağlan-redis mağaza socket.io ile çalışmaz

io.set('store', something) işleviyle socket.io ile kullanmak istiyorum. Ben yaptığımda

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

O Object #<RedisStore> has no method 'subscribe'

cevap

8

connect-redis diyor neden bilmek Bağlan/Express için bir Redis destekli oturum mağaza, ama 'mağaza protokolü' o uyumsuz olan yok socket.io kullandığı .

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

teşekkür ederiz:

Bunun yerine, socket.io sevk Redis mağaza uygulamasını kullanmak gerekir! Korktum çünkü ikinci set pub/sub/client, bir tane socket.io ve bir tane de ekspres yaratmak zorunda kalacağımı düşündüm. Şimdi görüyorum ki 'yeni RedisSessionStore' redis istemcisini bir seçenek olarak kabul ediyor. – Jakub

+0

Bu, yukarıdaki satırın RedisSessionStore = gerektirdiği anlamına gelir ('connect-redis') (ifade); app.js dosyasından kaldırılmalı veya io.set bölümünü oluşturmak için sadece değişkene yeniden ad verilmelidir? ve eğer var çıkarılacaksa, yukarıdaki ekspres oturumunu ne gibi saklıyorsunuz? – Lion789