SSE

SSE 是 “基于 HTTP 的单向 Stream Event 标准化方案”。

数据以持续流(Stream) 的形式从一端(通常是服务器)向另一端(通常是客户端)传输,且数据被封装为离散事件(Event)

1.通信流程

  1. 客户端发起连接:客户端通过 EventSource API 创建 HTTP 请求,请求头需指定 Accept: text/event-stream(告知服务器 “我要接收事件流”),同时通过 Connection: keep-alive 保持长连接。

  2. 服务器响应流:服务器返回 HTTP 200 状态码,响应头必须包含:

    • Content-Type: text/event-stream(声明响应体是事件流格式)

    • Cache-Control: no-cache(禁止缓存,确保事件实时性)

    • Connection: keep-alive(保持长连接,避免频繁重连)

  3. 服务器持续推事件:服务器通过长连接,将数据封装为 “事件格式” 的文本,持续写入响应流(无需关闭连接)。

  4. 客户端解析事件:客户端 EventSource 自动监听流数据,按标准格式解析事件,并触发对应的 JS 回调(如 onmessage、onerror)。

 2.“事件流” 的文本格式

每个事件由字段行组成,字段间用 \n 分隔,事件间用 \n\n 分隔。

字段名作用示例说明
event定义事件类型(自定义)event: message客户端可通过 addEventListener('message', ...) 监听该类型事件
data事件的核心数据data: Hello SSE数据可多行(每行以 data: 开头),最终会拼接为字符串
id事件唯一标识id: 12345客户端会记录最后接收的 id,重连时通过 Last-Event-ID 请求头告知服务器,避免漏接事件
retry客户端重连间隔(毫秒)retry: 3000若连接断开,客户端会按此间隔自动重连(默认 3 秒)

3. SSE 的核心特性

  • 单向通信:仅支持 “服务器 → 客户端” 推送,客户端无法通过 SSE 向服务器发送数据(若需双向通信,需配合 HTTP POST 或 WebSocket)。

  • 基于 HTTP:无需新协议,可复用现有 HTTP 基础设施(如反向代理、CDN),兼容性好(除 IE 外,所有现代浏览器均支持)。

  • 自动重连:客户端 EventSource 内置重连机制,连接断开后会按 retry 间隔自动重试,且通过 Last-Event-ID 保证数据不丢失。

  • 轻量级:事件格式是纯文本,无需复杂序列化(如 JSON 可直接作为 data 内容),解析成本低。

  • SSE 支持跨域。客户端创建 EventSource 时可指定跨域 URL(如 new EventSource('https://api.other-domain.com/sse')),服务器需在响应头中添加 Access-Control-Allow-Origin: *(或指定域名)以允许跨域。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐