我正在使用SockJS客户端库连接到使用SockJS节点js库的服务器。
每次网页刷新时,它都会与服务器建立新的Web套接字连接。以前的连接不会断开连接。因此,如果有5次刷新,则会有5种不同的Web套接字连接。
如何检查Web套接字连接是否处于活动状态,并阻止新连接在页面重新加载或网络断开时创建或断开现有连接?
答案 0 :(得分:0)
您无法阻止这种情况,但您可以从 Web Socket服务器执行心跳来检测过时的客户端并从服务器端删除连接。< / p>
也许您可以查看this MDN tutorial:
握手后的任何一点,客户端或服务器都可以 选择向另一方发送ping。收到ping后 收件人必须尽快送回乒乓球。您可以使用 这样可以确保客户端仍然连接,例如。
答案 1 :(得分:0)
每个新页面都是它自己的新上下文,旧的上下文中的所有内容都被丢弃在浏览器端。因此,无法跨页面加载保留WebSocket连接。
在您的情况下,在浏览器端,您实际上只有一个WebSocket连接:由新重新加载的页面建立。
服务器端的问题是,如果没有流量,就无法区分断开连接与非活动/非常慢的连接。
解决此问题的一种方法是使用心跳,即服务器和浏览器之间的常规ping / pong消息。 WebSocket在协议级别支持此功能,服务器端WebSocket库应该公开此机制。这在任何情况下都很有用,因为无论断开如何发生(例如网络故障),它都可以工作。
对于重新加载,您应该将处理程序附加到相关事件(beforeunload
),然后执行干净的断开连接。您也可以通过心跳捕捉到这一点,但这样您就可以在下一次心跳失败之前做出反应。