python笔记——SSE
SSE
SSE 是 “基于 HTTP 的单向 Stream Event 标准化方案”。
数据以持续流(Stream) 的形式从一端(通常是服务器)向另一端(通常是客户端)传输,且数据被封装为离散事件(Event)
1.通信流程
-
客户端发起连接:客户端通过
EventSourceAPI 创建 HTTP 请求,请求头需指定Accept: text/event-stream(告知服务器 “我要接收事件流”),同时通过Connection: keep-alive保持长连接。 -
服务器响应流:服务器返回 HTTP 200 状态码,响应头必须包含:
-
Content-Type: text/event-stream(声明响应体是事件流格式) -
Cache-Control: no-cache(禁止缓存,确保事件实时性) -
Connection: keep-alive(保持长连接,避免频繁重连)
-
-
服务器持续推事件:服务器通过长连接,将数据封装为 “事件格式” 的文本,持续写入响应流(无需关闭连接)。
-
客户端解析事件:客户端
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: *(或指定域名)以允许跨域。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)