WebSocket 协议关闭连接(Closing the Connection)
2023-10-07 02:00:30
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 连接,双方应该遵循以下步骤:
- 一方发送关闭帧。
- 对方收到关闭帧后,发送关闭确认帧。
- 双方关闭底层的 TCP 连接。
如果一方突然关闭连接,导致连接中断,对方应该收到一个错误帧。收到错误帧后,对方需要关闭底层的 TCP 连接。
总结
WebSocket 协议使用 TCP 连接和 TLS 会话来传输数据。要关闭 WebSocket 连接,终端需要关闭底层的 TCP 连接。终端需要使用一个方法来干净的关闭 TCP 连接,还有 TLS 会话,如果可能的话,抛弃后面可能受到的任意字符。
WebSocket 协议规范中定义了两种关闭连接的方式:正常关闭和异常关闭。正常关闭是指双方协商一致后关闭连接,异常关闭是指一方突然关闭连接,导致连接中断。
为了优雅地断开 WebSocket 连接,双方应该遵循以下步骤:
- 一方发送关闭帧。
- 对方收到关闭帧后,发送关闭确认帧。
- 双方关闭底层的 TCP 连接。