跳转至

第一章: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         |
 +-------------------------------- - - - - - - - - - - - - - - - +

消息类型

WebSocket 消息类型:
- 文本消息(Text):UTF-8 文本
- 二进制消息(Binary):二进制数据
- Ping/Pong:心跳检测
- Close:关闭连接

与 HTTP 对比

特性 HTTP WebSocket
通信方式 半双工 全双工
连接 短连接 长连接
实时性 轮询 实时推送
开销
协议 HTTP WS/WSS

适用场景

场景 说明
即时通讯 聊天应用、在线客服
实时数据 股票行情、体育比分
协作应用 在线文档、白板
游戏 多人在线游戏
物联网 设备监控、远程控制

小结

WebSocket 基础概念:

  • 架构:客户端 ↔ WebSocket 连接 ↔ 服务端
  • 核心概念:握手过程、数据帧、消息类型
  • 对比 HTTP:全双工、长连接、实时推送
  • 场景:即时通讯、实时数据、协作应用

下一章我们将学习 Python 实现。