socket.io重新连接重新运行连接?

我已经构build了一个简单的Web应用程序,通过使用socket.io的node.js服务器进行一些通信。

当用户连接时,节点传回回信息告诉客户订阅某些事件。 这工作正常。

但是,如果您让浏览器设置为空闲状态,那么客户端将最终订阅事件两次。 订阅过程如下所示:

当用户连接node.js得到一个“adduser”消息

这个function的两个关键的东西是:

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工作,以及如何可能发生?

默认情况下,客户端尝试在断开连接后重新连接。 如果你喜欢,可以改变这个: socket.io客户端

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