返回

WebSocket 协议关闭连接(Closing the Connection)

前端

WebSocket 协议关闭连接(Closing the Connection)

WebSocket 协议使用 TCP 连接和 TLS 会话来传输数据。要关闭 WebSocket 连接,终端需要关闭底层的 TCP 连接。终端需要使用一个方法来干净的关闭 TCP 连接,还有 TLS 会话,如果可能的话,抛弃后面可能受到的任意字符。

WebSocket 协议规范中定义了两种关闭连接的方式:

  • 正常关闭(Normal Closure) :双方协商一致后关闭连接。
  • 异常关闭(Abnormal Closure) :一方突然关闭连接,导致连接中断。

正常关闭(Normal Closure)

正常关闭是指双方协商一致后关闭连接。这种情况下,双方都会发送一个关闭帧(Close Frame)来表示他们希望关闭连接。关闭帧的格式如下:

0xFFFF  (2 bytes)            // opcode = 0x8
0x0000  (2 bytes)            // reserved
[Payload data]              // Application data (optional)
  • Opcode :关闭帧的 opcode 为 0x8。
  • Reserved :保留字段,必须为 0x0000。
  • Payload data :可选的应用数据,可以为空。

收到关闭帧后,对方需要发送一个关闭确认帧(Close Acknowledgement Frame)来表示他们已收到关闭帧。关闭确认帧的格式如下:

0xFFFF  (2 bytes)            // opcode = 0x8
0x0000  (2 bytes)            // reserved
  • Opcode :关闭确认帧的 opcode 为 0x8。
  • Reserved :保留字段,必须为 0x0000。

发送完关闭确认帧后,双方就完成了 WebSocket 连接的关闭。

异常关闭(Abnormal Closure)

异常关闭是指一方突然关闭连接,导致连接中断。这种情况下,对方会收到一个错误帧(Error Frame)来表示连接已中断。错误帧的格式如下:

0xFFFF  (2 bytes)            // opcode = 0x8
0xFFFF  (2 bytes)            // reserved
[Payload data]              // Error data
  • Opcode :错误帧的 opcode 为 0x8。
  • Reserved :保留字段,必须为 0xFFFF。
  • Error data :错误数据,表示连接中断的原因。

收到错误帧后,对方需要关闭底层的 TCP 连接。

优雅地断开 WebSocket 连接

为了优雅地断开 WebSocket 连接,双方应该遵循以下步骤:

  1. 一方发送关闭帧。
  2. 对方收到关闭帧后,发送关闭确认帧。
  3. 双方关闭底层的 TCP 连接。

如果一方突然关闭连接,导致连接中断,对方应该收到一个错误帧。收到错误帧后,对方需要关闭底层的 TCP 连接。

总结

WebSocket 协议使用 TCP 连接和 TLS 会话来传输数据。要关闭 WebSocket 连接,终端需要关闭底层的 TCP 连接。终端需要使用一个方法来干净的关闭 TCP 连接,还有 TLS 会话,如果可能的话,抛弃后面可能受到的任意字符。

WebSocket 协议规范中定义了两种关闭连接的方式:正常关闭和异常关闭。正常关闭是指双方协商一致后关闭连接,异常关闭是指一方突然关闭连接,导致连接中断。

为了优雅地断开 WebSocket 连接,双方应该遵循以下步骤:

  1. 一方发送关闭帧。
  2. 对方收到关闭帧后,发送关闭确认帧。
  3. 双方关闭底层的 TCP 连接。