一、实时通信技术演进与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'}<