我构建了一个简单的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工作中如何重新连接以及如何发生这种情况?
答案 0 :(得分:4)
默认情况下,客户端会在断开连接后尝试重新连接。如果您愿意,可以更改: socket.io client
如果重新连接,服务器将看到一个新连接,由您来实现逻辑以识别与前一个连接的新连接。所以在实践中 - 不是在“连接”时实现你的adduser逻辑,而是在客户端向服务器发送一些信息后做(或不做)。