gpt4 book ai didi

node.js - socket.io 在空闲时断开客户端的连接

转载 作者:IT老高 更新时间:2023-10-28 23:20:57 32 4
gpt4 key购买 nike

我有一个生产应用程序,它使用 socket.io(node.js 后端)将消息分发给所有登录的客户端。我的许多用户都遇到了与 socket.io 服务器的断开连接。客户端的正常用例是让 Web 应用程序在整个工作日保持打开状态。工作日中应用程序的大部分时间都处于空闲状态,但应用程序仍处于打开状态 - 直到 socket.io 连接丢失,然后应用程序将它们踢出。

有什么方法可以使连接更加可靠,这样我的用户就不会经常失去与 socket.io 服务器的连接?

最佳答案

看来,我们在这里所能做的就是给您一些调试建议,以便您了解更多关于导致问题的原因。所以,这里列出了一些需要研究的事项。

  1. 确保将 socket.io 配置为自动重新连接。在最新版本的 socket.io 中,自动重新连接默认为开启,但您可能需要验证没有任何代码将其关闭。

  2. 确保客户端不会进入休眠状态,这样所有网络连接都将变为非事件状态并断开连接。

  3. 在正常工作的客户端(断开连接之前)中,使用 Chrome 调试器、网络选项卡、webSockets 子选项卡来验证您是否可以看到客户端和服务器之间的常规 ping 消息。您必须打开调试窗口,进入网络选项卡,然后在打开该调试窗口的情况下刷新您的网页以开始查看网络事件。您应该会看到一个看起来很时髦的 URL,其中包含 ?EIO=3&transport=websocket&sid=xxxxxxxxxxxx。点击那个。然后单击“框架”子标签。此时,您可以查看正在发送的单个 websocket 数据包。您应该每隔一段时间看到长度为 1 的小数据包(这些是 ping 和 pong 保持事件数据包)。下面有一个示例屏幕截图,显示了您要查找的内容。如果您没有看到这些保持事件的数据包,那么您需要解决它们不存在的原因(可能是一些 socket.io 配置或版本问题)。

  4. 既然你提到你可以重现这种情况,你想知道的一件事是套接字是如何关闭的(客户端启动或服务器端启动)。收集这方面信息的一种方法是在您的客户端上安装网络分析器,这样您就可以从字面上观察通过网络传入/传出客户端的每个数据包。有许多不同的分析仪,而且很多都是免费的。我个人使用过 Fiddler,但我经常听到人们谈论 WireShark。您想看到的正是当客户端失去连接时网络上发生的情况。客户端是否决定发送关闭套接字数据包?客户端是否收到来自某人的关闭套接字数据包?连接断开时网络上发生的情况。


Chrome 调试器中的 webSocket WebView

webSocket network view in Chrome Debugger

关于node.js - socket.io 在空闲时断开客户端的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30280530/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com