WebSocket: Close Behavior

 16th August 2022 at 9:52am

WebSocket 在结束会话时的一些行为。

如果 JS 代码主动调用 WebSocket.close(),发送 1000 (Normal Closure) 的 Close 帧。

如果 JS 代码还未调用 WebSocket.close(),但是浏览器 tab 被关闭了,浏览器会发送 1001 (Going Away) 的 Close 帧。

如果浏览器 crash 了,那么它发不了 Close 帧。服务端可能会以这两种方式感知到关闭:

  • No Status Rcvd (1005):表示收到的控制帧中没有具体的 close code。一些代理在清理无效连接时可能会有此行为
  • Abnormal Closure (1006):表示没有收到 Close 控制帧,但是 WS 其下的 TCP 连接断开了