Socket.io:服务器重新连接客户端的正确方法
我正在用socket.io构buildMEAN应用程序。 当页面刚刚加载时,由于应用程序的单页性质,套接字连接在用户导航到各种页面时build立并保持活动状态。
用户信息在我的套接字连接中可用,这要感谢passport.socketio 。
但是,当用户login或注销时,我希望连接重新初始化,否则套接字将包含有关用户的过时数据。 目前,我试图用这种方式来实现它:当用户login/注销时,服务器通过调用socket.disconnect();
断开这个特定客户端的套接字socket.disconnect();
。
在客户端,我监听disconnect
事件,并尝试重新build立连接,如下所示:
_socket.on('disconnect', function(reason) { _socket.connect(); });
好了,现在,当用户注销或进入时,服务器断开客户端连接,此客户端连接回来,并且套接字中的用户信息是最新的。 到现在为止还挺好。
但是,考虑到连接中断的不同情况:服务器重新启动。 以前,它“只是工作”:当我停止我的服务器,连接中断,但是当我再次启动服务器,连接自动重新build立。 但是我添加了我的_socket.connect();
调用,它不再工作:连接仍然是closures,直到我刷新浏览器中的页面。
我已经检查,当服务器调用disconnect();
, disconnect
处理程序的reason
是: io server disconnect
。 而当服务器停止时,原因是: transport close
。
那么,我已经实现了我的断开连接处理程序如下所示:
_socket.on('disconnect', function(reason) { if (reason === 'transport close'){ // don't do anything special } else { _socket.connect(); } });
现在起作用了。 但是,所有这一切似乎是绝对的肮脏的黑客。 至less,给出的reason
( io server disconnect
和transport close
)似乎只是人类可读的string,所以他们可能在将来会改变,这将导致我的代码停止工作。 而且,应该有更好的方法来做到这一点。 我必须错过一些重要的东西,但是不幸的是我在socket.io上找不到任何好的文档。
所以,问题是:服务器重新连接某个特定客户端的正确方法是什么?
此外,如果你有任何关于socket.io的资源的build议,我会非常感激。