我已经构建了一个简单的Web应用程序,它通过使用socket.io与node.js服务器进行一些通信。
当用户连接时,节点会返回信息告知客户端订阅某些事件。这很好运行。
但是,如果你让浏览器空闲,客户端最终会被订阅两次。订阅过程如下:
当用户连接时,node.js获取一个“adduser”消息。
在该函数中发生的两个关键事情是:
事情是它从未两次说“你已连接”,在“adduser”中的任何console.log()函数都不会再次调用节点端。唯一看起来发生的事情是node.js再次发出nodeinfo(或者客户端认为如此),导致客户端重新订阅。
有人能向我解释一下socket.io中的重新连接是如何工作的,以及这可能是如何发生的吗?
当用户连接时,节点会返回信息告知客户端订阅某些事件。这很好运行。
但是,如果你让浏览器空闲,客户端最终会被订阅两次。订阅过程如下:
当用户连接时,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中的重新连接是如何工作的,以及这可能是如何发生的吗?