我一直在用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]中进行请求的原因。
问题:
(在我看来,这里是有关WebSocket协议的很好的文档,如果有人想阅读有关它的更多信息[link1] [link2]。
只有通过刷新IE上的Web应用程序,WebSocket才会被销毁。如果您在Web应用程序中的页面之间导航,则会创建一个新的WebSocket,但最后一个WebSocket将被破坏。
如果只是一个极端的问题,那么使用http备用广告可能是您唯一的选择。我想您已经对阻止套接字连接的代理服务器执行了此操作。