第一章:WebSocket 简介¶
什么是 WebSocket?¶
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,支持服务端主动推送数据。
┌─────────────────────────────────────────────────────────────┐
│ WebSocket 架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 客户端 │ │
│ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │
│ │ │ Browser │ │ Mobile App│ │ Desktop │ │ │
│ │ └───────────┘ └───────────┘ └───────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ WebSocket 连接 │ │
│ │ │ │
│ │ 客户端 ◄──────────────────────────► 服务端 │ │
│ │ 全双工通信 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 服务端 │ │
│ │ ┌───────────────────────────────────────────────┐ │ │
│ │ │ • 连接管理 │ │ │
│ │ │ • 消息处理 │ │ │
│ │ │ • 广播推送 │ │ │
│ │ │ • 房间管理 │ │ │
│ │ └───────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
核心概念¶
握手过程¶
WebSocket 握手流程:
1. 客户端发起 HTTP 请求
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
2. 服务端响应
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
3. 连接建立,开始双向通信
数据帧¶
WebSocket 数据帧格式:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len | Extended payload length |
|I|S|S|S| (4) |A| (7) | (16/64) |
|N|V|V|V| |S| | (if payload len==126/127) |
| |1|2|3| |K| | |
+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
| Extended payload length continued, if payload len == 127 |
+ - - - - - - - - - - - - - - - +-------------------------------+
| |Masking-key, if MASK set to 1 |
+-------------------------------+-------------------------------+
| Masking-key (continued) | Payload Data |
+-------------------------------- - - - - - - - - - - - - - - - +
消息类型¶
与 HTTP 对比¶
| 特性 | HTTP | WebSocket |
|---|---|---|
| 通信方式 | 半双工 | 全双工 |
| 连接 | 短连接 | 长连接 |
| 实时性 | 轮询 | 实时推送 |
| 开销 | 高 | 低 |
| 协议 | HTTP | WS/WSS |
适用场景¶
| 场景 | 说明 |
|---|---|
| 即时通讯 | 聊天应用、在线客服 |
| 实时数据 | 股票行情、体育比分 |
| 协作应用 | 在线文档、白板 |
| 游戏 | 多人在线游戏 |
| 物联网 | 设备监控、远程控制 |
小结¶
WebSocket 基础概念:
- 架构:客户端 ↔ WebSocket 连接 ↔ 服务端
- 核心概念:握手过程、数据帧、消息类型
- 对比 HTTP:全双工、长连接、实时推送
- 场景:即时通讯、实时数据、协作应用
下一章我们将学习 Python 实现。