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

fra*_*one 6 connection reconnect node.js socket.io

我已经构建了一个简单的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'});
Run Code Online (Sandbox Code Playgroud)

socket.emit('nodeinfo')通知客户端订阅事件.

所以客户有

socket.on('nodeinfo', function(data) { ... }
Run Code Online (Sandbox Code Playgroud)

事情是它永远不会说'你连接'两次,'adduser'中的console.log()函数都没有在节点端再次被调用.似乎唯一发生的事情是node.js再次发出nodeinfo(或者客户端认为)导致客户端重新订阅.

任何人都可以向我解释socket.io工作中如何重新连接以及如何发生这种情况?

Mar*_*ark 4

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

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