Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Socket.io:服务器重新连接客户端的正确方式_Node.js_Socket.io - Fatal编程技术网

Node.js Socket.io:服务器重新连接客户端的正确方式

Node.js Socket.io:服务器重新连接客户端的正确方式,node.js,socket.io,Node.js,Socket.io,我正在用socket.io构建MEAN应用程序。当页面刚刚加载时,由于应用程序的单页特性,套接字连接将建立并保持活动状态,同时用户将导航到各个页面 用户信息在我的套接字连接中可用,这要感谢 但是,当用户登录或注销时,我希望重新初始化连接,否则套接字将包含有关用户的过时数据。目前,我尝试以这种方式实现它:当用户登录/注销时,服务器通过调用socket.disconnect()来断开这个特定客户机的套接字 在客户端,我监听disconnect事件,并尝试重新建立连接,如下所示: _socket.

我正在用socket.io构建MEAN应用程序。当页面刚刚加载时,由于应用程序的单页特性,套接字连接将建立并保持活动状态,同时用户将导航到各个页面

用户信息在我的套接字连接中可用,这要感谢

但是,当用户登录或注销时,我希望重新初始化连接,否则套接字将包含有关用户的过时数据。目前,我尝试以这种方式实现它:当用户登录/注销时,服务器通过调用
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的资源有任何建议,我也非常感谢。

现在遇到同样的问题,您最终解决了问题吗?我想没有,对不起:(事实上,我当时一直在做的项目已经死了,但我记得我不得不忍受这种肮脏的黑客行为。谢谢你,尽管这不是最好的解决方案,但它是有效的:)