javascript - 如果从未进行关闭握手,WebSockets 不会在 IE 上关闭

标签 javascript internet-explorer websocket network-protocols handshake

我一直在使用 JavaScript 实现 WebSocket,但遇到了以下问题:
当我向网络应用程序连接的端点发送关闭控制帧时,它不会发回关闭控制帧。

这还不错,因为浏览器会在一段时间后关闭 WebSocket 连接。

但需要注意的一些事情是:

  • 浏览器只允许同时连接特定数量的 WebSocket。

  • 刷新 Web 应用程序时,会创建一个新的 WebSocket

这会导致 IE 出现问题:
刷新 Web 应用程序超过 6 次时,无法建立 WebSocket 连接。

如果 WebSocket 没有完全关闭,IE 似乎不会“删除”它们。奇怪的是,网络套接字的数量似乎永远不会因为刷新或只是等待而减少。

只有关闭浏览器窗口或选项卡才能将 WebSocket 数量重置为 0。


我做了一些研究,这就是我发现的: <小时/>

浏览器仅支持同时连接特定数量的 WebSocket。

IE支持6个websocket连接 [link]

Chrome支持255个websocket连接[link] .

当您执行 socket.close() 时,不会触发 socket.onclose(),而是在端点响应关闭消息时调用它. [link]

IE 等待 15 秒以让端点发送关闭消息 [link] .

Chrome 等待 60 秒以获取响应消息 [抱歉,没有此链接,通过测试发现了这一点]。

如果没有收到响应消息,浏览器将关闭 WebSocket 连接并出现 TimeoutError。

如果我错了,请纠正我:)

<小时/>

我尝试使用 unbeforeload 断开与端点的连接,希望浏览器在一段时间后关闭连接,但没有成功。 [link] .
这也可能是 IE 无法在 unbeforeload 函数中执行请求的原因 [link] .

问题:

  1. 有什么方法可以重置 WebSocket 的数量吗? 使用 JavaScript 在浏览器中连接到端点?
  2. 有没有办法立即断开 WebSocket 与端点的连接,而无需完全关闭连接?
  3. 唯一的方法是通知托管端点的人进行一些更改,以便他们发回结束帧吗?
  4. 有什么我误解的地方或者我可以尝试让它发挥作用的地方吗?

(在我看来)如果有人想了解更多关于 WebSocket 协议(protocol)的内容,这里有很好的文档 [link1] [link2] .

更新:

只有在 IE 上刷新 Web 应用程序,WebSocket 才不会被破坏
如果您在 Web 应用程序中的页面之间导航,则会创建一个新的 WebSocket,但最后一个 WebSocket 将被销毁。

最佳答案

如果这只是一个边缘情况问题,那么使用 http 回退可能是您唯一的选择。我想您已经对阻止套接字连接的代理服务器执行了此操作。

关于javascript - 如果从未进行关闭握手,WebSockets 不会在 IE 上关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51893524/

相关文章:

javascript - 如何防止仅在按退格键时关闭 Bootstrap 模式

javascript - JavaScript 上日期对象的问题

javascript - 为此添加一些动态文本。在 native react 中

jquery - IE9 预期标识符、字符串或数字错误

python - react + socket.io 发出未通过 - 基本错误

javascript - 如何使倒计时器函数可重用

html - 如何在 IE(和其他浏览器)中保留内联 SVG 的纵横比?

javascript - 如何使用 VBA 在 IE 上使用 Java 类型按钮

运行 websockets secure (WSS) 的 node.js 服务器上的 SSL 证书

javascript - 如何为 'ws' Web-Socket 模块创建自定义事件?