javascript - 在断开连接或刷新时关闭 websocket 连接

标签 javascript websocket

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

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

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

最佳答案

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

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

服务器端的问题是,如果没有流量,则无法区分断开连接和非事件/非常慢的连接。

解决这个问题的一种方法是使用心跳,即服务器和浏览器之间定期发送消息。 WebSocket 在协议(protocol)级别支持这一点,并且服务器端 WebSocket 库应该公开此机制。这在任何情况下都很有用,因为无论断开连接如何发生(例如网络故障),它都会起作用。

对于重新加载,您应该将处理程序附加到相关事件(beforeunload),然后执行干净的断开连接。您也可以通过心跳捕捉到这一点,但这样您就可以在下一次心跳失败之前使用react。

关于javascript - 在断开连接或刷新时关闭 websocket 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40818415/

相关文章:

javascript - 用类装饰器覆盖构造函数?

javascript - ckeditor - 将文本区域插入数据库

scala - finagle-websocket 服务器示例不会在不阻塞监听的情况下死掉

在 C 中通过 HTTP 连接到网站

scala - 如何访问在 websocket 中创建的actor?

javascript - 为什么我只能在当前 session 中使用 blob

javascript - 我可以查明用户的网络浏览器是否存储了我的自签名 ssl 证书的异常吗?

javascript - 删除具有某个类的所有元素,直到到达下一个元素

ios - 如何在 Swift 项目中使用 SocketRocket?

node.js - 客户端无法连接到Azure应用程序服务上托管的nodejs websocket服务器?