HTMLPAGE Logo

SSE 实现详解

作者:HTMLPAGE
发布日期:2025-11-26
待分类

Server-Sent Events 技术实现,实时推送数据到客户端

SSE(Server-Sent Events)是实现单向服务器推送的简单方案,适合流式日志、状态更新或轻量级实时通知。本文介绍实现模式、心跳/重连与与回退策略。

SSE 优势与限制

  • 优势:实现简单、基于 HTTP,易于通过代理与 CDN 回源;浏览器端支持 EventSource API。
  • 限制:仅支持单向流(服务器到客户端),对大量并发连接需要注意服务器资源(每个连接保持 HTTP 长连接)。

实现要点(Node.js 示例)

  • 在服务端设置合适的 Content-Type: text/event-stream、禁用响应缓存并定期发送心跳以防连接断开。
  • 提供重连策略:客户端默认会在连接断开后自动重连,可在事件中发送 retry 指令调整重连间隔。

伸缩与回退

  • 对于高并发情形使用连接池或转发层(如 Nginx、Envoy)并监控连接数;必要时回退到 WebSocket 或短轮询方案。

示例参考:

// 简化的 Express SSE 示例 app.get('/sse', (req, res) => { res.setHeader('Content-Type', 'text/event-stream'); res.setHeader('Cache-Control', 'no-cache'); res.write('retry: 10000\n\n'); const id = setInterval(() => res.write(`data: ${JSON.stringify({ t: Date.now() })}\n\n`), 3000); req.on('close', () => clearInterval(id)); });
微信中可直接分享当前页面