Редагувати: спробувавши деякі модулі, які не працювали, я фактично пішов і написав власну бібліотеку для цього. Безсоромна вилка: перевірте її на https://github.com/aviddiviner/Socket.IO-sessions . Я залишу свій старий пост нижче для історичних цілей:
Я виконав цю роботу досить акуратно, не маючи необхідності обходити транспорт flashsocket відповідно до рішення pr0zac вище. Я також використовую express із Socket.IO. Ось як.
Спочатку передайте ідентифікатор сеансу у подання:
app.get('/', function(req,res){
res.render('index.ejs', {
locals: {
connect_sid: req.sessionID
// ...
}
});
});
Потім, на ваш погляд, зв’яжіть його з клієнтською стороною Socket.IO:
<script>
var sid = '<%= connect_sid %>';
var socket = new io.Socket();
socket.connect();
</script>
<input type="button" value="Ping" onclick="socket.send({sid:sid, msg:'ping'});"/>
Потім у вашому серверному прослуховувачі Socket.IO підніміть його та прочитайте / запишіть дані сеансу:
var socket = io.listen(app);
socket.on('connection', function(client){
client.on('message', function(message){
session_store.get(message.sid, function(error, session){
session.pings = session.pings + 1 || 1;
client.send("You have made " + session.pings + " pings.");
session_store.set(message.sid, session); // Save the session
});
});
});
У моєму випадку це мій session_store
Редіс, який користується redis-connect
бібліотекою.
var RedisStore = require('connect-redis');
var session_store = new RedisStore;
// ...
app.use(express.session({ store: session_store }));
Сподіваюся, це допоможе тому, хто знайде цю публікацію під час пошуку в Google (як я це зробив;)