可观察对象 (Observable) 与订阅者 (Subscriber) 的关系
可观察对象(Observable) —— 产生数据流
↑
| 订阅(subscribe)
↓
订阅者(Subscriber) —— 接收并处理数据
↑
| 实现
↓
数据观察者(Observer) —— 定义如何处理数据的接口核心概念解析
Observer(观察者)
定义了一套处理数据的回调接口,作为参数传递给Observable对象。ts{ next: (value) => { /* 数据到达时的回调 */ }, error: (err) => { /* 错误发生时的回调 */ }, complete: () => { /* 数据流结束时的回调 */ } }Observable(可观察对象)
- 通过
new工厂化创建可观察数据流对象,将数据生产逻辑(如 AJAX 请求、定时器、事件监听等)封装在独立的上下文中。 - 只有被订阅时才会执行。
- 支持管道化操作(通过
pipe转换为新的Observable对象)。
- 通过
Subscription(订阅)
- 调用
Observable的subscribe方法,传入Observer对象来处理各种情况。 - 作用是控制数据流的生命周期。
- 调用
NestJS SSE 推送流程极简总结 📝
“你管流,NestJS 管推”
你返回一个
Observable<{ data: T }>
(例如interval(1000).pipe(map(...))生成数据流)。NestJS 的
@Sse()自动处理- 设置响应头
Content-Type: text/event-stream。 - 订阅你的
Observable,监听数据发射。
- 设置响应头
数据转换规则:
每次Observable发射{ data: T }时,NestJS 将其转为:data: <JSON.stringify({ data: T })>\n\n并通过 HTTP 流式推送。
客户端(如浏览器)通过
EventSource接收
解析为e.data。