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