socket.io重新连接会重新运行connect吗?

7
我已经构建了一个简单的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'});

socket.emit('nodeinfo')会向客户端发出订阅事件的信号。

因此,客户端就有了

socket.on('nodeinfo', function(data) { ... }

事情是它从未两次说“你已连接”,在“adduser”中的任何console.log()函数都不会再次调用节点端。唯一看起来发生的事情是node.js再次发出nodeinfo(或者客户端认为如此),导致客户端重新订阅。
有人能向我解释一下socket.io中的重新连接是如何工作的,以及这可能是如何发生的吗?
1个回答

4
默认情况下,客户端在断开连接后会尝试重新连接。如果您愿意,可以更改此设置: socket.io 客户端 如果重新连接,则服务器将看到一个新连接,并由您来实现逻辑以将新连接与之前的连接进行识别。因此,在实践中,不要在“连接”时实现您的 adduser 逻辑,而应在客户端向服务器发送一些信息后再实现它(或不实现)。

是的。和我刚刚注意到的我们应用程序的结果完全一样。谢谢。 - Xin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接