在啥情况下 websocket 关闭事件会告诉你 wasClean 是假的?

Posted

技术标签:

【中文标题】在啥情况下 websocket 关闭事件会告诉你 wasClean 是假的?【英文标题】:In what cases will a websocket close event tell you wasClean is false?在什么情况下 websocket 关闭事件会告诉你 wasClean 是假的? 【发布时间】:2014-06-13 20:45:41 【问题描述】:

在什么情况下 websocket 关闭事件会告诉你 wasClean 是假的?例如:

connection.onclose = function(event) 
   if(!event.wasClean) 
      // whyyyyyyy???
   

【问题讨论】:

可能来自此页面的特定代码:developer.mozilla.org/en-US/docs/Web/API/CloseEvent 在我的情况下,我得到的代码是 1006。您是否建议将某些代码号的 wasClean 设置为 true?如果是这种情况,我什至看不到使用代码查看 wasClean 的值的意义。 我真的不确定,但我认为wasClean 是一种更通用的方式来判断连接是否完全关闭,然后您可以通过查看获得“更多信息”在代码处。但是是的,看来wasClean和状态码是相关的 【参考方案1】:

当 WebSocket 连接未通过关闭握手关闭时,wasClean 属性设置为 false。 即没有从服务器接收到有效的关闭帧。

来自文档:“CloseEvent.wasClean 返回一个布尔值,指示连接是否完全关闭

【讨论】:

我认为这应该是真的?如果我让客户端启动 close() 并且服务器以 close() 结束(这是规范),我可以获得“wasClean == true”。如果服务器启动 close(),我会在 chrome 上得到“true”,但在 firefox 上不会,但在所有情况下,我都会得到我想要的代码 (1000) 和我想要的消息 /shrug。 @AndrewPikul 我观察到 Chrome 和 Firefox 之间的相同差异 此时的行为可能已经改变,它们确实更新得相当频繁。也许维护者看到了我的评论 X'D

以上是关于在啥情况下 websocket 关闭事件会告诉你 wasClean 是假的?的主要内容,如果未能解决你的问题,请参考以下文章

Springboot整合Websocket遇到的坑

在啥情况下需要多项式的泰勒级数?

在啥情况下 getpeername 返回 IP:PORT 0.0.0.0:0

C语言中volatile在啥情况下使用

JS try catch语句一般在啥情况下使用?是必须使用的吗

在啥情况下你应该更喜欢使用 std::copy 写入 cout?