首页 > 解决方案 > 快速检测互联网客户端的websocket丢失

问题描述

我正在使用 WebSockets 连接到我无法控制的服务器。这是一个聊天应用程序,所以我期待当用户的互联网因任何原因被切断时,我会显示“重新连接”警报并尝试每 2 秒重新连接一次。

问题是,例如,当您关闭调制解调器时,.onclose 事件最多需要 1 分钟才能启动,而且我无法知道用户是否仍然连接到服务器。

代码示例:

<script type="text/javascript">
    var ws = new WebSocket("wss://echo.websocket.org");
    ws.onerror = function () {
        console.log("error happened")
    }
    ws.onclose = function () {
        // websocket is closed.
        console.log("Connection is closed...");
    };
</script>

标签: javascriptwebsocket

解决方案


如果您想检测用户是否下线,您可以简单地使用该offline事件。

这是一个例子:

window.addEventListener('offline', e => {
  console.log('offline')
})

如果您坚持使用onclose/onerrorWebSockets 的处理程序,则需要增加 ping 间隔或减少 WebSockets 服务器上的超时。从您的 OP 来看,这些值似乎设置为 60 秒。


推荐阅读