在断开或刷新时关闭Websocket连接



我正在使用sockjs客户端库来连接到使用sockjs节点js库的服务器。

当网页每次与服务器建立新的Web套接字连接时都会刷新时。并且以前的连接不会断开连接。因此,如果有5个刷新,将有5个不同的Web插座连接。

如何检查Web插座连接是否处于活动状态,并防止新连接在页面重新加载或网络断开连接上创建或断开现有连接?

每个新页面都是其自己的新上下文,旧上下文中的所有内容都会被丢弃浏览器侧。因此,没有办法保留跨页负载的Websocket连接。

在您的情况下,在浏览器方面,您实际上只有一个Websocket连接:由新重新加载的页面建立。

服务器端的问题是,如果没有流量,则无法将断开连接与不活动/非常缓慢的连接区分开。

解决此问题的一种方法是使用心跳,即服务器和浏览器之间的常规ping/pong/pong。Websocket在协议级别支持此机制,服务器端网络库库应公开此机制。在任何情况下,这都是有用的,因为它有效,无论断开如何发生(例如,对于网络故障)。

为了重新加载,您应该将处理程序附加到相关事件(beforeunload),然后进行干净的断开连接。您也会以心跳来抓住此事,但是这样您就可以在下一次心跳失败之前做出反应。

您无法阻止这种情况,但是您可以从 Web套接字服务器进行 heartbeats 来检测陈旧客户端并删除从服务器端连接。

也许您可以查看此MDN教程:

在握手后的任何时候,客户端或服务器都可以 选择将ping发送给另一方。收到ping时, 收件人必须尽快寄回乒乓球。您可以使用 这是为了确保客户端仍然连接。

最新更新