SSE
Server-Sent Events(SSE)是一种在浏览器和服务器之间建立单向通信通道的技术,允许服务器主动向客户端推送数据(通常基于 HTTP 的流式传输)。下面是 SSE 的优缺点分析:
✅ 优点
1. 实现简单
- 使用 HTTP 协议,前端只需创建一个 EventSource 实例即可。
- 服务端只要持续输出 text/event-stream 格式的数据流。
- 无需额外协议(如 WebSocket 的握手过程)。
2. 自动重连
浏览器在连接断开后会自动重连,不需要手动管理重连逻辑。
3. 带有事件机制
支持自定义事件名(例如:event: custom),便于前端做事件分发处理。
4. 节省资源
- 对于多数只需“服务器推送”的场景(如通知、实时日志、价格变动等),SSE 比 WebSocket 更轻量。
- 基于 HTTP 长连接,更易穿越防火墙、代理。
5. 更好支持缓存 & 代理
因为是基于 HTTP 协议的,因此更容易与现有的 HTTP 基础设施(如 Nginx、缓存代理等)协同工作。
❌ 缺点
1. 单向通信
SSE 是服务器到客户端的单向通道,如果客户端要发送数据仍需使用普通 HTTP 请求(例如 Fetch/AJAX)
2. 不支持二进制
- 只能发送文本(纯文本或 JSON 字符串),不支持二进制数据(不像 WebSocket 支持 Blob/ArrayBuffer)。
3. 浏览器支持有限
- IE 不支持(Edge 12+ 支持),但现代浏览器普遍兼容。
- 移动端浏览器中部分实现不稳定
4. 连接数限制
- 一些浏览器(如 Chrome)对同一源的 HTTP 长连接数有限(通常最多 6 个),可能影响大规模使用。
5. 跨域复杂
虽然支持 CORS,但使用时要特别注意设置响应头(如 Access-Control-Allow-Origin),并且不能携带 Cookie(除非设置了 withCredentials 并正确配置服务端)。