Server-Sent Events 完整通信流程可视化
在建立 SSE 连接之前,客户端和服务器必须先通过 TCP 三次握手建立可靠的连接通道。
TCP 连接建立后,客户端发起 HTTP 请求,告诉服务器"我要建立 SSE 连接"。
🔑 关键:Accept: text/event-stream
告诉服务器我需要 SSE 格式的数据流
🔑 关键:Transfer-Encoding: chunked
分块传输编码,数据可以增量推送
每条消息以 data: 开头,以 \n\n 结尾。
可以指定 event: 类型(如 message、close、error),id: 用于断线重连。
SSE 之所以高效,核心在于 HTTP 长连接 和 连接复用 技术。
一次 TCP 连接,复用多次 HTTP 请求,避免重复握手
在单一 TCP 连接上并行传输多个数据流,彻底解决队头阻塞
| 特性 | SSE | WebSocket |
|---|---|---|
| 连接方向 | 单向(服务端→客户端) | 全双工(双向) |
| 协议基础 | HTTP/HTTPS | 独立协议 (ws://) |
| 兼容性 | IE/Edge 需 polyfill | 良好 |
| 自动重连 | ✅ 内置 | 需手动实现 |
| 适用场景 | 实时推送、通知 | 聊天、游戏、协作 |
让我们看看从建立连接到接收数据的完整过程: