Node.js Socket.io:服务器重新连接客户端的正确方式
我正在用socket.io构建MEAN应用程序。当页面刚刚加载时,由于应用程序的单页特性,套接字连接将建立并保持活动状态,同时用户将导航到各个页面 用户信息在我的套接字连接中可用,这要感谢 但是,当用户登录或注销时,我希望重新初始化连接,否则套接字将包含有关用户的过时数据。目前,我尝试以这种方式实现它:当用户登录/注销时,服务器通过调用Node.js Socket.io:服务器重新连接客户端的正确方式,node.js,socket.io,Node.js,Socket.io,我正在用socket.io构建MEAN应用程序。当页面刚刚加载时,由于应用程序的单页特性,套接字连接将建立并保持活动状态,同时用户将导航到各个页面 用户信息在我的套接字连接中可用,这要感谢 但是,当用户登录或注销时,我希望重新初始化连接,否则套接字将包含有关用户的过时数据。目前,我尝试以这种方式实现它:当用户登录/注销时,服务器通过调用socket.disconnect()来断开这个特定客户机的套接字 在客户端,我监听disconnect事件,并尝试重新建立连接,如下所示: _socket.
socket.disconnect()来断开这个特定客户机的套接字代码>
在客户端,我监听disconnect
事件,并尝试重新建立连接,如下所示:
_socket.on('disconnect', function(reason) {
_socket.connect();
});
好的,现在,当用户注销或登录时,服务器断开客户机的连接,该客户机重新连接,套接字中的用户信息是最新的。到目前为止,一切顺利
<>但是,考虑连接中断时的不同情况:服务器重新启动。以前,它“刚刚工作”:当我停止服务器时,连接断开,但当我再次启动服务器时,连接会自动重新建立。但是在我添加了我的\u socket.connect()之后代码>调用,它不再工作:在我刷新浏览器中的页面之前,连接仍处于关闭状态
我已经检查过,当服务器调用disconnect()时代码>,指定给断开连接处理程序的原因是:io服务器断开连接
。当服务器停止时,原因是:传输关闭
好的,那么,我已经实现了我的断开连接处理程序,如下所示:
_socket.on('disconnect', function(reason) {
if (reason === 'transport close'){
// don't do anything special
} else {
_socket.connect();
}
});
现在它起作用了。但是,所有这些看起来都是绝对肮脏的黑客行为。至少,给定的原因(io服务器断开连接
和传输关闭
)似乎只是人类可读的字符串,因此它们将来可能会更改,这将导致我的代码停止工作。而且,应该有更好的方法来做到这一点;我一定错过了一些重要的东西,但不幸的是,我在socket.io上找不到任何好的文档
所以,问题是:服务器重新连接某个特定客户机的正确方法是什么
此外,如果您对了解socket.io的资源有任何建议,我也非常感谢。现在遇到同样的问题,您最终解决了问题吗?我想没有,对不起:(事实上,我当时一直在做的项目已经死了,但我记得我不得不忍受这种肮脏的黑客行为。谢谢你,尽管这不是最好的解决方案,但它是有效的:)