2016-11-26 1332 views
0

我正在使用SockJS客户端库连接到使用SockJS节点js库的服务器。在断开连接或刷新时关闭websocket连接

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

如何检查Web套接字连接是否处于活动状态并阻止新连接在页面重新加载或网络断开连接时创建或断开现有连接?

回答

0

您不能防止这种情况,但你可以从网络套接字服务器心跳检测陈旧的客户和下降,由服务器端的连接。

或许你可以在this MDN tutorial看一看:

在握手后的任意点,客户端或服务器可以 选择一个ping发送给对方。当收到ping时,收件人必须尽快发回乒乓球。例如,您可以使用 来确保客户端仍处于连接状态。

0

每个新页面都是它自己的新上下文,旧的上下文中的所有内容都会被丢弃浏览器端。因此,无法跨页加载保留WebSocket连接。

在你的情况下,在浏览器端你实际上只有一个单一的WebSocket连接在任何时候:由新重新加载的页面建立。

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

解决此问题的一个方法是使用心跳,即服务器和浏览器之间的常规ping/pong消息。 WebSocket在协议层面支持这一点,而服务器端WebSocket库应该公开这种机制。这在任何情况下都很有用,因为它可以工作,而不管断开的方式如何(例如,网络故障)。

对于重新加载,您应该在相关事件(beforeunload)上附加处理程序,然后执行干净的断开连接。你也可以用心跳来捕捉它,但这样你可以在下一次心跳失败之前做出反应。