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

问题描述 投票:32回答:1

我一直在用JavaScript实现WebSocket,但我遇到了这个问题:我的Web应用程序所连接的端点在发送一个封闭控制帧时不会发送回它。

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

但是要注意的是:

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

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

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

如果未完全关闭WebSocket,似乎IE不会“删除” WebSocket。奇怪的是,Web套接字的数量似乎从未因刷新或等待而减少。

仅通过关闭浏览器窗口,或使用选项卡将WebSockets的数量重置为0。

我做了一些研究,这就是我发现的内容:


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

IE支持连接6个websocket [link]

Chrome支持连接255个WebSocket [link]

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

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

Chrome等待60秒钟才能收到响应消息[很抱歉,对此没有链接,通过测试发现了此消息。]

如果未收到响应消息,浏览器将关闭WebSocket连接,并应发生TimeoutError。

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


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

问题:

  1. 是否有任何方法可以重置WebSocket的数量在浏览器中通过JavaScript连接到端点?
  2. 是否有一种方法可以在不彻底关闭连接的情况下立即从端点断开WebSocket的连接?
  3. 是使此功能生效的唯一方法是通知托管其端点的主机进行一些更改,以便他们确实发送结束帧吗?
  4. 是否有我误解的东西,或者我可以尝试使其正常工作?

(在我看来,这里是有关WebSocket协议的很好的文档,如果有人想阅读有关它的更多信息[link1] [link2]

更新:

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

javascript internet-explorer websocket network-protocols handshake
1个回答
0
投票

如果只是一个极端的问题,那么使用http备用广告可能是您唯一的选择。我想您已经对阻止套接字连接的代理服务器执行了此操作。

© www.soinside.com 2019 - 2024. All rights reserved.