什么是SSE 流式推送
SSE 流式推送(Server-Sent Events,服务器发送事件),是一种基于 HTTP 协议、服务器主动向客户端单向推送实时数据流的 Web 技术(HTML5 标准)。
一、一句话理解
客户端(浏览器)用EventSource发起一个长连接 HTTP 请求,服务器返回text/event-stream类型的响应,连接一直保持打开,服务器可以随时、持续地往这条连接里“推”数据,客户端像监听事件一样接收这些流式数据。
二、核心特点(为什么叫“流式推送”)
- 单向推送:只能服务器 → 客户端发数据;客户端不能通过 SSE 回传(要发数据需另走普通 HTTP 请求)。
- 基于 HTTP 长连接:复用标准 HTTP/HTTPS,不用额外协议/端口,兼容现有代理、负载均衡。
- 流式传输:服务器持续、分段发送数据(类似“流”),客户端边收边处理(不用等全部数据)。
- 自动重连:连接断了,浏览器会自动重试(默认约 3 秒)。
- 事件驱动:数据按“事件”格式推送,客户端监听
message或自定义事件。 - 文本为主:数据是 UTF-8 文本(JSON 很常用),不适合原生二进制(需 Base64 编码)。
三、工作流程(极简)
- 客户端:
new EventSource('/api/sse')发起 GET 请求,请求头表明要text/event-stream。 - 服务器:返回响应头
连接保持打开,不立即结束响应。Content-Type: text/event-stream Cache-Control: no-cache Connection: keep-alive - 服务器推送数据(按 SSE 格式):
data: 第一条消息\n\n data: {"msg":"第二条","time":"14:00"}\n\n event: custom\ndata: 自定义事件内容\n\n - 客户端:监听
onmessage或自定义事件,实时接收并处理每一段数据。
四、典型应用场景(最适合“只推不收”)
- LLM/AI 对话逐字流式输出(ChatGPT 式打字效果)
- 实时通知、消息推送、系统告警
- 股票/行情/监控数据实时刷新
- 日志/进度实时展示
- 新闻/公告实时更新
五、和 WebSocket 的区别(一句话)
- SSE:单向推送、HTTP 原生、轻量、自动重连、适合“服务器主动发”。
- WebSocket:全双工双向、独立协议、更复杂、适合聊天室/实时协作等双向交互。
六、一句话总结
SSE 就是用 HTTP 长连接做的、服务器单向、实时、流式推送,简单、轻量、易部署,适合只需要服务器主动发数据的场景。
