7

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

4

1 回答 1

4

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

如果重新连接,服务器将看到一个新连接,由您执行逻辑来识别与前一个连接的新连接。所以在实践中 - 在客户端向服务器发送一些信息之后,而不是在“连接”时实现你的 adduser 逻辑。

于 2012-03-13T04:56:06.073 回答