选型

SSEServer-Sent Events

你可能会说

只是服务端往下推进度,也要上 WebSocket 吗?

服务端用一条普通 HTTP 连接持续往下推文本事件浏览器用 EventSource 接收,断线会自动重连,报文格式就是 event / data / id / retry 几行文本。适合通知、任务进度、日志、AI 流式输出。只能单向推,客户端要上行还是得另发请求。
也常被叫作Server-Sent EventsEventSource
先问一句只要服务端单向往下推?
默认SSE→擅长自动重连 + 纯文本→别用客户端频繁上行
成熟度采用

什么时候选它

  • 通知、任务进度、日志、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。
延伸阅读 · 权威出处