SSE
SSE是什么
SSE(Server-Sent Events) 是 HTML5 提供的一种标准 API,允许服务器通过 HTTP 协议向客户端持续推送数据,适用于需要单向实时通信的场景。
适用于:通知、消息订阅、实时数据更新等。
核心特点:
- 单向通行:服务器 → 客户端(客户端不能向服务器发送数据)。
- 基于HTTP:使用标准HTTP/1.1或HTTP/2协议,兼容性强。
- 数据格式:默认传输 UTF-8 文本数据,二进制需编码(可编码 JSON)。
- 自动重连:内置连接恢复机制。
- 简单易用:浏览器原生支持,无需额外库。
SSE的原理
- 客户端建立连接通过
EventSource
构造函数连接到服务器上某一个事件流接口。 - 服务器保持连接开放,持续返回事件流
Content-Type: text/event-stream
(响应头设置) - 消息数据格式为
data: 消息\n\n
。 - 浏览器监听事件并做出响应。
SSE的优缺点
优点 | 缺点 |
---|---|
协议简单: 基于HTTP,无需其他协议 | 单向通信: 客户端无法通过SSE向服务器发送数据 |
断线重连: 内置断线重连机制(默认3秒间隔) | 仅支持文本:二进制数据需编码传输 |
低延迟: 减少轮询开销,实时性高 | 兼容性限制: 不支持IE及旧版浏览器 |
支持事件类型: 可自定义事件 | 连接限制: 浏览器最多支持6个并发连接 |
SSE vs WebSocket 对比
特性 | SSE | WebSocket |
---|---|---|
通信方向 | 单向(服务器 -> 客户端) | 双向全双工 |
协议 | HTTP(长连接) | 独立协议(ws:// /wss:// ) |
数据格式 | 仅文本 | 文本/二进制 |
断线重连 | 默认支持 | 需要自己实现 |
兼容性 | 主流浏览器(IE除外) | 广泛支持 |