SSEServer-Sent Events
你可能会说
只是服务端往下推进度,也要上 WebSocket 吗?
服务端用一条普通 HTTP 连接持续往下推文本事件浏览器用 EventSource 接收,断线会自动重连,报文格式就是 event / data / id / retry 几行文本。适合通知、任务进度、日志、AI 流式输出。只能单向推,客户端要上行还是得另发请求。
也常被叫作Server-Sent EventsEventSource
什么时候选它
- 通知、任务进度、日志、AI 流式 token
- 复用现有 HTTP 鉴权、代理和网关
- 不想自己写重连逻辑
什么时候别选
- 客户端要频繁上行(换 WebSocket)
- 需要传二进制(SSE 是文本)
- 代理会缓冲响应且改不动配置(延迟会很怪)
容易混在一起 · 怎么分
SSE≠WebSocket
SSE 单向、走 HTTP、自带重连;WebSocket 双向,但要自己做重连和心跳。
SSE≠长轮询
长轮询是挂起请求再返回;SSE 是一条连接持续推多条消息。
SSE≠HTTP/2 服务端推送
HTTP/2 Push 推的是资源且已被主流浏览器废弃;SSE 推的是事件流。
Q面试会问什么
- 问:SSE 的报文长什么样?
答:纯文本,每行一个字段:event、data、id、retry,空行表示一条消息结束。 - 问:要发 POST 请求怎么办?
答:EventSource 只支持 GET;要 POST 就用 fetch 读 response.body 流自己解析。 - 问:为什么线上老是延迟一次出来?
答:Nginx 等代理默认缓冲响应,要关 proxy_buffering 或加 X-Accel-Buffering: no。
延伸阅读 · 权威出处