Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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_Connection_Socket.io_Reconnect - Fatal编程技术网

Node.js socket.io是否重新连接重新运行连接?

Node.js socket.io是否重新连接重新运行连接?,node.js,connection,socket.io,reconnect,Node.js,Connection,Socket.io,Reconnect,我构建了一个简单的web应用程序,它使用socket.io通过node.js服务器进行一些通信 当用户连接时,节点会传回通知客户端订阅特定事件的信息。那很好 但是,如果您让浏览器设置为空闲,客户端最终会订阅两次事件。订阅过程如下所示: 当用户连接node.js时,会收到一条“adduser”消息 该功能中出现的两个关键因素是: socket.on('adduser', function(data) <snip> socket.emit('nodeinfo', {node_

我构建了一个简单的web应用程序,它使用socket.io通过node.js服务器进行一些通信

当用户连接时,节点会传回通知客户端订阅特定事件的信息。那很好

但是,如果您让浏览器设置为空闲,客户端最终会订阅两次事件。订阅过程如下所示:

当用户连接node.js时,会收到一条“adduser”消息

该功能中出现的两个关键因素是:

socket.on('adduser', function(data)
   <snip>
   socket.emit('nodeinfo', {node_id: NODE_ID});
   socket.emit('update', {msg: 'you are connected'});
问题是它从不说两次“youarconnected”,在节点端不会再次调用“adduser”中的console.log()函数。唯一可能发生的事情是node.js再次发出nodeinfo(或者客户端认为是这样),导致客户端重新订阅


有人能向我解释一下socket.io中的重新连接是如何工作的,以及这种情况是如何发生的吗?

默认情况下,客户端会在断开连接后尝试重新连接。如果您愿意,可以更改此选项:


如果重新连接,服务器将看到一个新连接,由您实现逻辑以识别新连接与前一个连接。因此,在实践中,不要在“连接”时实现adduser逻辑,而是在客户端向服务器发送一些信息后再执行(或不执行)。

是。与结果相同,我只是注意到我们的应用程序发生了什么。谢谢
socket.on('nodeinfo', function(data) { ... }