我已经构建了一个简单的 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 中的重新连接是如何工作的以及这可能会如何发生?