Staram się, aby sesje działały w moim socket.on ("połączenie", ...) Próbuję uzyskać to działa przy użyciu najnowszych wersji: Socket.io - 0.9.13, Express - 3.1.0 i najnowsze wersje innych modułów.Jak mogę przekonwertować sesje do pracy za pomocą redis, express & socket.io?
W każdym razie próbowałem używać obu modułów 'connect-redis' i 'session.socket.io' i oba mają podobne problemy.
W moim kodzie mam 2 redis stores (socketio.RedisStore i require ('connect-redis') (express)), teraz ten program działa dobrze, ale ponieważ express i socket.io muszą udostępniać dane sesji, Zastanawiam się, czy ta konfiguracja poprawnie użyje sesji? czy magazyny sesji muszą być tym samym obiektem dla express/socketio? Trochę szarej strefy do mnie, ponieważ 2 RedisStore używa tej samej bazy danych w tle?
Próbowałem używać zarówno red.tore w socket.io jak i redisStore connect-redis w obu miejscach, ale socket.io nie lubi redisStore connect-redis i express nie przypomina socketio.redisStore.
Jeśli używam connect-Redis RedisStore następnie socket.io/lib/manager.js narzeka: this.store.subscribe (... TypeError Obiekt # ma metody 'Subskrybuj'
Gdybym użyj socketio.RedisStore następnie express/node_modules/connect/lib/middleware/session.js narzeka: TypeError: Object # nie ma metody 'get'
* Uwaga Wolałbym, aby wtyczka session.socket.io działała, ale kiedy robię to samo ustawienie z tą wtyczką, express (także) narzeka: TypeError: Object # nie ma metody 'get'
Czy można używać 2 różnych RedisStores dla sesji?
Mój bieżący kod wygląda następująco:
var
CONST = {
port: 80,
sessionKey: 'your secret sauce'
};
var
redis = require('redis');
var
express = require('express'),
socketio = require('socket.io'),
RedisStore = require('connect-redis')(express);
var
redisStore = new RedisStore(),
socketStore = new socketio.RedisStore();
var
app = express(),
server = require('http').createServer(app),
io = socketio.listen(server);
app.configure(function(){
app.use(express.cookieParser(CONST.sessionKey));
app.use(express.session({ secret: CONST.sessionKey, store: redisStore }));
app.use(express.static(__dirname + '/test'));
app.get('/', function (req, res) {res.sendfile(__dirname + '/test/' + 'index.htm');});
});
io.configure(function(){
io.set('log level', 1);
io.enable('browser client minification');
io.enable('browser client etag');
io.enable('browser client gzip');
io.set('store', socketStore);
});
io.sockets.on('connection', function(socket){
socket.emit('message', 'Test 1 from server')
});
server.listen(CONST.port);
console.log('running...');
Dzięki za szybką odpowiedź, więc jest to to samo rozwiązanie, jeśli chcę użyć wtyczki session.socket.io? czy jest to zupełnie inny problem? –
To nie używa wtyczki session.socket.io i działa na najnowszych wersjach pliku socket.io i express. –
ahhh ok, mógłbym dać to, dzięki za pomoc. –