编辑:在尝试了一些不起作用的模块之后,我实际上已经走了,并编写了自己的库来执行此操作。无耻的插件:前往https://github.com/aviddiviner/Socket.IO-sessions进行检查。我出于历史目的将旧帖子留在下面:
按照上面pr0zac的解决方案,我无需绕过flashsocket传输就可以很整洁地完成此工作。我也在Socket.IO中使用express。这是如何做。
首先,将会话ID传递给视图:
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
库的Redis 。
var RedisStore = require('connect-redis');
var session_store = new RedisStore;
// ...
app.use(express.session({ store: session_store }));
希望这对在搜索Google时找到此帖子的人有所帮助(就像我一样;)