1)客户端发起 WebSocket 握手请求:客户端通过 HTTP 请求发起 WebSocket 握手,请求头中包含以下字段:
1)Upgrade: websocket:表明客户端希望升级到 WebSocket 协议;
2)Connection: Upgrade:表明客户端希望升级连接;
3)Sec-WebSocket-Key:随机生成的 Base64 编码字符串,用于握手验证。
示例请求头:
GET /ws-endpoint HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
2)服务器返回 WebSocket 握手响应:
服务器验证客户端的握手请求,并返回 HTTP 101 状态码(Switching Protocols),表示协议升级成功。
响应头中包含以下字段:
1)Upgrade: websocket:确认协议升级;
2)Connection: Upgrade:确认连接升级;
3)Sec-WebSocket-Accept:基于客户端的 Sec-WebSocket-Key 计算的值,用于验证握手。
示例响应头:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
3)WebSocket 连接建立:
1)握手成功后,HTTP 连接升级为 WebSocket 连接,客户端和服务器可以通过 WebSocket 协议进行双向通信;
2)连接基于 TCP,支持全双工通信。
4)数据传输:
1)客户端和服务器通过 WebSocket 协议发送和接收数据帧(Frame)。数据帧可以是文本或二进制格式;
2)文本帧:用于传输 JSON、字符串等文本数据;
{"message": "Hello"}
3)二进制帧:用于传输图片、音频、视频等二进制数据。
[0x01, 0x02, 0x03]
5)连接关闭:
1)客户端或服务器可以主动发送关闭帧(Close Frame)来终止连接;
2)关闭帧包含关闭状态码和原因(可选);
3)示例关闭帧。
Close Frame:
Code: 1000 (Normal Closure)
Reason: "Connection closed by client"
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。