KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA
实时推送与 SSE — keel 龙骨
实时推送与 SSE 的参考信息:实时推送与 SSE
课程导读 · 一条连接能撑多久,决定了用户看到的是什么
SSE(Server-Sent Events)是这轮 AI 应用里最被低估的技术:所有大模型的流式输出、Agent 的中间过程回传、后台任务的进度条,默认都是走它。它简单到只有一个 text/event-stream 响应头,也脆弱到能被代理缓冲、gzip、负载均衡空闲超时、手机切后台任何一个环节悄悄掐断。
这门课的目标不是"会用 EventSource",而是让一条 SSE 连接在生产环境里活得住、断了能续、续了不错。
与其它课程的位置
| 相关内容 | 在哪 | 与本课的分工 |
|---|---|---|
| SSE + Redis Stream 续播的真实案例 | Harness 源码解剖室板块里讲「多宿主托管」的那门课,第 03 章(会员专区) | 那边是一个平台的具体解法;本课讲通用原理与可复用做法 |
| 长任务为什么要异步 | 后端高并发工程拔高 05 | 那边解释"为什么要异步";本课解决"结果怎么实时回传" |
| 长连接的优雅下线 | 构建打包与部署上线 04 | 那边讲发布时长连接怎么处理;本课讲连接本身怎么设计成可重连 |
| MCP 的 SSE transport | MCP Protocol Engineering 06 | 那边是协议视角;本课是传输与工程视角 |
建议顺序:先看《后端高并发工程拔高》理解异步链路(或至少知道为什么长任务不能同步等),再来学这门。
你会拿到什么
| 章节 | 一句话 | 关键动作 |
|---|---|---|
| 01 选型 | 什么时候用 SSE 而不是 WebSocket | 四种通道对比 + 决策树 + 成本表 |
| 02 协议本身 | 报文格式与浏览器的真实行为 | 五个字段 + Last-Event-ID + EventSource 的三条限制 |
| 03 服务端实现 | 从"能跑"到"能上线" | 异步生成器 + 关闭缓冲 + 心跳 + 超时配置 |
| 04 断线重连与事件续播 | 断的不是连接,是信任 | Last-Event-ID + 事实日志 + 幂等消费 |
| 05 大模型流式输出 | token 流之外的结构化事件 | 事件类型设计 + 增量渲染 + 取消传播 |
| 06 连接治理与容量 | 长连接是一种新的容量单位 | 连接即并发 + 背压 + 多实例广播 |
| 07 生产坑与可观测 | 为什么本地好好的线上卡住 | 缓冲/压缩/代理/移动端四类坑 + 指标 |
| 08 安全与运维 | 一条不能带 header 的连接怎么鉴权 | 三种鉴权方案 + 租户隔离 + 灰度回滚 |
每章结构统一:原理 → 动手:可观察结果 → 故障注入 → 自测题。
这门课的硬要求
与后端板块一致:没有数据不许下结论。长连接系统尤其如此,因为它的失败模式是"看起来正常但没有数据流动",只有量化指标能暴露。
额外三条:
- 每条长连接都要能被观测:首字节时间、事件数、重连次数、异常断开原因分类;
- 任何"卡住"都要能定位到是哪一层(应用层生成器 / 反向代理缓冲 / 压缩 / 负载均衡超时):
- 断线重连必须真的测过——在压测里主动掐断连接,看客户端是否自动恢复且不错乱。
替身边界
服务端示例以 FastAPI(Python 异步) 为主,少量给出 Node/Express 对照;代理以 nginx 为主。WebSocket、gRPC streaming 只作对比,不展开实现。私有部署与 CDN 的差异会标注,但不涉及具体厂商配置。