所以我一直在用JavaScript实现一个websocket,而我遇到了一个问题:
与我的Web应用程序连接的终结点在发送封闭控制框时不会发回。
这还不错,因为浏览器会在一段时间后关闭websocket连接。
但是要注意的几件事是
浏览器仅允许同时连接一定数量的websocket。
刷新Web应用程序时,会创建一个新的Websocket
这会导致IE上的问题:
刷新网络应用超过6次时,无法建立网络套接字连接。
如果未完全关闭,则似乎IE不会“删除” websocket。奇怪的是,Web套接字的数量似乎从未因刷新或等待而减少。
仅通过关闭浏览器窗口或选项卡,将WebSocket的数量重置为0。
我做了一些研究,这就是我发现的东西:
浏览器仅支持同时连接一定数量的Websocket。
IE支持连接6个网络套接字[link]
Chrome支持连接255个Websocket [link]。
socket.onclose()
不会触发socket.close()
,当端点响应并发出关闭消息时会调用它。 [link]
IE等待15秒,以使端点发送关闭消息[link]。
Chrome等待60秒钟,直到出现响应消息[抱歉,对此没有链接,通过测试发现了此消息。]
如果未收到任何响应消息,则浏览器将关闭websocket连接,并应发生TimeoutError。
如果我写错了,请纠正我:)
我尝试使用unbeforeload
与端点断开连接,希望浏览器过一会儿就关闭连接,但是没有运气。 [link]。
也可能是IE无法在unbeforeload
函数[link]内部进行请求的原因。
问题:
(在我看来)如果有人想详细了解[link1] [link2],这里是有关websocket协议的很好的文档。
只有通过刷新IE上的Web应用程序,WebSocket才会被销毁。
如果您在Web应用程序中的页面之间导航,则会创建一个新的WebSocket,但最后一个WebSocket将被销毁。
答案 0 :(得分:1)
如果这只是一个极端的问题,那么使用http备用广告可能是您唯一的选择。我想您已经对阻止套接字连接的代理服务器执行了此操作。
答案 1 :(得分:0)
只有1个想法可以验证(未确认)。不幸的是,没有访问IE的权限。
应用程序可以在WebWorker / iFrame中打开websocket连接。在页面刷新期间,“ websocket连接范围”将被删除,并且连接被释放
EXPLANATION
问题正文中的内容:
只有通过刷新IE上的Web应用程序,WebSocket才会被销毁。如果您在Web应用程序中的页面之间导航,则会创建一个新的WebSocket,但最后一个WebSocket将被破坏。
说页面刷新时,Websocket连接不会仅破坏。在正常导航期间,一切正常。
因此,如果在其他范围内打开了websocket连接,并在页面重新加载期间将其删除,那么希望该连接将被破坏。