Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未在IE上关闭WebSocket(如果从未进行过关闭握手)_Javascript_Internet Explorer_Websocket_Network Protocols_Handshake - Fatal编程技术网

Javascript 未在IE上关闭WebSocket(如果从未进行过关闭握手)

Javascript 未在IE上关闭WebSocket(如果从未进行过关闭握手),javascript,internet-explorer,websocket,network-protocols,handshake,Javascript,Internet Explorer,Websocket,Network Protocols,Handshake,我一直在用JavaScript实现WebSocket,我有一个问题: 我的web应用程序所连接的端点在发送闭合控制帧时不会发送回它。 这并不坏,因为浏览器会在一段时间后关闭WebSocket连接 但需要注意的是: 浏览器只允许同时连接特定数量的WebSocket 刷新web应用程序时,将创建一个新的WebSocket 这导致IE出现问题: 刷新web应用程序超过6次时,无法建立WebSocket连接。 如果WebSocket没有完全关闭,IE似乎不会“删除”它们。奇怪的是,web套接字的数量

我一直在用JavaScript实现WebSocket,我有一个问题:
我的web应用程序所连接的端点在发送闭合控制帧时不会发送回它。

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

但需要注意的是:

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

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

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

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

仅通过关闭浏览器窗口或选项卡将WebSocket数重置为0


我做了一些调查,我发现:


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

IE支持6个待连接的网箱

Chrome支持255个要连接的WebSocket

执行
socket.close()
操作时不会触发
socket.onclose()
,当端点响应关闭消息时会调用它。

IE等待端点发送关闭消息15秒

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

如果未收到响应消息,浏览器将关闭WebSocket连接,并且会出现超时错误。

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


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

问题:

  • 是否有任何方法可以重置正在使用的WebSocket的数量 是否使用JavaScript在浏览器中连接到端点
  • 有没有一种方法可以在不完全关闭连接的情况下立即断开WebSocket与端点的连接
  • 只有这样,才能让它起作用,通知承载端点的用户进行一些更改,以便他们发送一个结束帧回来
  • 有什么我误解了的,或者我可以试着让它发挥作用吗
  • 在我看来,如果有人想阅读更多关于WebSocket协议的内容,这里有一些很好的文档

    更新: 仅通过刷新IE上的web应用程序,WebSocket不会被破坏

    如果您在web应用程序中的页面之间导航,将创建一个新的WebSocket,但最后一个WebSocket将被销毁。

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

    只有一个想法需要验证(未确认)。不幸的是,我们无法访问IE进行验证

    应用程序可以在WebWorker/iFrame中打开websocket连接。在页面刷新期间,“websocket连接范围”将被删除,连接将被释放


    解释

    该问题正文的内容如下:

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

    表示网页刷新时,Websocket连接不会被破坏。在正常导航期间,一切正常


    所以,如果websocket连接是在其他作用域中打开的,而这些作用域将在页面重新加载过程中被删除,那么希望连接会被破坏。

    您找到解决问题的方法了吗?@MikhailChibel我还没有找到其他解决方法。我认为最好的方法是通知创建WebSocket服务器的人,他们应该处理结束事件,并在请求结束帧时发回结束帧。这样,WebSocket连接将更快地关闭,并且不会有任何WebSocket连接等待超时错误发生。@Deckerz实际上没有,我没有。你能提供一个例子或一个如何做到这一点的链接吗?我已经通过联系制作WebSocket服务器的人解决了我的问题,他们没有对关闭消息做出响应,并且他们已经解决了这个问题。这个问题涉及:您应该考虑是否要支持过时的浏览器。我确实理解为web socket连接使用回退http连接的概念。。如果您可以合作,那么当整个页面被破坏时,您打算如何关闭web套接字连接(从回退),如果这种情况不会发生太多,我会让它超时,同时使用回退。请每分钟重试一次连接,以查看何时可以升级回使用websocket。。。听起来很合理,你呢?您可以上传解决方案并在旧IE上进行测试(远程)