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

2024-01-02

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


默认情况下,客户端会在断开连接后尝试重新连接。如果您愿意,可以更改此设置:套接字.io 客户端 https://github.com/LearnBoost/socket.io-client

如果重新连接,服务器将看到一个新连接,您需要实现逻辑来识别新连接与前一个连接。因此,在实践中,不要在“连接”时实现 adduser 逻辑,而是在客户端向服务器发送一些信息后执行(或不执行)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

socket.io 是否重新连接重新运行连接? 的相关文章

随机推荐