首页 > 解决方案 > 立即检测连接丢失 - Websocket - JavaScript

问题描述

有没有办法在 WebSocket 失去互联网连接后立即触发函数。

socket.onClose并且socket.onError不会触发满足我要求的立即响应。

标签: javascriptwebsocket

解决方案


在某些情况下,操作系统本身并不知道连接已丢失(例如网络故障)。这有时被称为半开连接。

由于操作系统不知道连接已关闭,因此不会通知浏览器或节点服务器,也不会调用您的 WebSocket 回调。

这里有一篇关于半开连接的不错的博客文章

您可以通过以下方式缓解该问题,例如:

  1. 在可疑情况下自行关闭套接字(即,当页面失去焦点时手动关闭套接字)。

  2. 实现客户端 ping。发送 ping 失败将向程序(和操作系统)表明连接丢失,从而导致onclose回调被调用。

这些选项总是会有一些延迟。网络丢失检测并不容易。


推荐阅读