SSE 如何工作?

考查重点:事件流传输与断线恢复。SSE用HTTP响应保持事件流,服务端按text/event-stream持续发送事件;客户端EventSource接收,并可借事件ID恢复断线后的进度

本题目录

参考答案

核心回答

SSE 是基于 HTTP 响应的服务端事件流。客户端发起请求,服务端以 Content-Type: text/event-stream 持续写入 UTF-8 文本;客户端按空行分隔事件,再读取 event、data、id 等字段。它适合模型输出、任务进度这类主要由服务端持续推送的场景。

原生浏览器 EventSource 提供接收、错误通知和自动重连。服务端若发送事件 id,浏览器重连时可以带上 Last-Event-ID;是否能补发遗漏事件,还取决于服务端有没有保存事件及实现重放。

一条事件怎样到达页面

id: task-42:8
event: progress
data: {"taskId":"task-42","step":"检索完成"}

最后的空行结束这条事件。前端用 addEventListener("progress", handler) 接收,event.data 是字符串,约定为 JSON 时再解析。多行 data: 会以换行拼接;以冒号开头的行是注释,适合心跳,不会触发普通业务消息。

SSE 是事件格式,不等于每次网络读取恰好是一条事件。一条事件可能分成多次读取,也可能多条事件一起到达。HTTP/2 仍可承载 SSE,无需依赖 HTTP/1.1 的 Transfer-Encoding: chunked。

重连不等于重新执行任务

任务提交与事件订阅可以分开:先创建持久任务,再订阅其事件。断线后继续查询同一个任务,按事件序号补发或返回最新快照。前端用事件标识去重;业务收到完成或失败事件后主动关闭订阅,避免把正常任务结束当成需要无限重连。

双向高频通信可以考虑 WebSocket;仅需推送进度时,SSE 能沿用常见的 HTTP 接入方式。两者都需要处理鉴权、代理超时和慢客户端。

对应教程

参考资料

相关面经

4 篇

字节跳动

全栈开发工程师
二面
查看原面经 →
你简历里提到了基于 SSE 和 Event Trace 的 Agent 可视化工作台,能介绍一下 SSE 吗?

美团

AI 后端
校招秋招一面、二面
查看原面经 →
请介绍一下 SSE 协议,以及它与普通 HTTP 请求的区别。

网易

AI 应用开发工程师
查看原面经 →
SSE流式对话的底层原理,如何设计心跳保活和断线后精准续接上下文?

字节跳动

Agent 开发工程师
一面、二面、三面
查看原面经 →
sse

收录题集

1 个来源,共1 份题集

模型接口与评测问答

Guide · JavaGuide · 1 条原题

查看题集 →

相关题目

4 题