一、实时通信技术演进与SSE定位
1.1 主流实时通信技术对比
技术特性对比表
技术 |
协议 |
方向性 |
复杂度 |
延迟 |
适用场景 |
短轮询 |
HTTP |
双向(伪) |
低 |
高 |
简单状态检测 |
长轮询 |
HTTP |
双向(伪) |
中 |
中 |
即时消息 |
WebSocket |
WS |
全双工 |
高 |
低 |
游戏/高频交易 |
SSE |
HTTP |
单向(服务端→客户端) |
低 |
低 |
实时通知/日志流 |
1.2 SSE的核心优势
- 协议轻量:基于标准HTTP协议,无需额外握手
- 自动重连:内置断线重连机制(retry字段)
- 文本友好:天然支持UTF-8文本数据流
- 浏览器原生支持:现代浏览器100%兼容(IE除外)
二、SSE协议深度解析
2.1 协议规范详解
2.1.1 响应头要求
HTTP/1.1 200 OK
Content-Type: text/event-stream
Cache-Control: no-cache
Connection: keep-alive
2.1.2 事件数据格式
event: status
id: 42
data: {"temperature": 23.5, "humidity": 65}
retry: 3000 # 重连间隔(毫秒)
2.2 关键字段说明
字段名 |
作用 |
示例值 |
event |
自定义事件类型 |
stock-update |
id |
事件ID(断点续传依据) |
159 |
data |
有效载荷(支持多行) |
Hello\nWorld |
retry |
重连间隔(毫秒) |
5000 |
三、服务端实现方案
3.1 Node.js实现(Express)
const express = require('express');
const app = express();
app.get('/stream', (req, res) => {
res.writeHead(200, {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive'
}<