一、什么是 SSE?
SSE(Server-Sent Events)是一种服务器向客户端推送数据的技术,它允许服务器主动向客户端发送数据,而不需要客户端频繁轮询。SSE 特别适合实时通信场景,比如AI 聊天的流式输出、实时通知、股票行情更新等。
SSE 的核心特点:
- 单向通信:服务器向客户端单向推送数据
- 基于 HTTP:使用标准的 HTTP 协议,不需要特殊的服务器支持
- 自动重连:连接断开时会自动尝试重连
- 文本格式:使用简单的文本格式传输数据
- 轻量级:实现简单,开销小
二、SSE 的工作原理
1. 连接建立
客户端通过向服务器发送一个 HTTP 请求来建立 SSE 连接。服务器返回一个特殊的响应,设置 Content-Type: text/event-stream 头,告诉客户端这是一个 SSE 流。
2. 数据传输
服务器以流的形式持续发送数据,每个数据块都是一个 SSE 格式的消息。SSE 消息格式如下:
data: 消息内容
其中:
- data: 是固定前缀
- 消息内容可以是任意文本,通常使用 JSON 格式
- \n\n 是消息结束标志
3. 客户端处理
客户端接收并解析流式数据,根据消息内容进行相应处理。在浏览器中,可以使用 EventSource API 或 fetch + ReadableStream 来处理 SSE。
三、前端实现 SSE 的两种方式
方式一:使用原生 EventSource API
EventSource 是浏览器内置的 SSE 客户端 API,使用非常简单:
const sse = new EventSource('/api/stream');
sse.addEventListener('message', (event) => {
const data = JSON.parse(event.data);
console.log('收到数据:', data);
});
sse.addEventListener('error', (event) => {
console.error('SSE 错误:', event);
});
注意:EventSource 只支持 GET 请求,无法发送 POST 数据。

