And*_*rew 12 node.js express socket.io
我已按照本指南:http://www.danielbaulig.de/socket-ioexpress/将express.js链接到socket.io,它的工作非常出色.
我让用户登录到一个页面(express.js POST请求设置会话对象),当他们进行身份验证时,它将它们定向到一个新的页面,其中socket.io加载并在服务器上socket.io可以获取会话从快递开始.所以一切正常.
现在我在页面上有用户使用socket.io并刷新该页面 - 有时socket.io连接仍然存在(即它不会断开连接).我要做的是更改io.set('authorization')函数以确保在用户连接时 - 它将断开仍然对该客户端开放的所有现有socket.io实例.
以下是它当下的样子:
//socket.io connect to express
var parseCookie = require('connect').utils.parseCookie;
io.set('authorization', function (data, accept) {
if (data.headers.cookie)
{
data.cookie = parseCookie(data.headers.cookie);
data.sessionID = data.cookie['express.sid'];
// (literally) get the session data from the session store
sessionStore.get(data.sessionID, function (err, session)
{
if (err || !session)
{
// if we cannot grab a session, turn down the connection
//note: a session is created when the user logs in
accept('Error', false);
}
else
{
//TODO something here before we accept the connection
//??
// save the session data
data.session = session;
//accept the connection
accept(null, true);
}
});
}
else
{
return accept('No cookie transmitted.', false);
}
});
Run Code Online (Sandbox Code Playgroud)
如何检查即将接受的客户端是否具有先前的连接,并且它仍处于打开状态(因此我们需要断开旧的连接).
快递会话中有一个"用户名" - 所以我们可以获取会话对象并获取用户名,我只是无法弄清楚如何查看所有socket.io客户端的列表并查看快递每个会话的会话,并检查它是否与当前进行身份验证的用户相同.
在我的应用程序中,我明确地管理了socket.io会话.在服务器端,无论何时建立新连接,我都会执行以下操作:socketio_session[user_id].push(session).这使我可以访问为特定用户连接的所有会话.在您的情况下,您可能不需要存储每个用户的会话列表,但只存储最新会话并onconnect在存储新会话之前强制断开现有会话(如果有).
| 归档时间: |
|
| 查看次数: |
5979 次 |
| 最近记录: |