广播与在线状态:低延迟协作能力 数据库变更订阅适合「数据持久化的实时同步」,但有些场景并不需要落库——比如鼠标光标位置、临时聊天、谁在线。为此 Realtime 提供两种轻量能力:广播(Broadcast)与在线状态(Presence)。本节讲解它们的应用场景与使用思路。 为什么需要广播与在线状态 想象一个协作白板应用,需求包括: 每个人的光标在其他人屏幕上实时移动。 多人能看到当前谁在线。 某人画出一条线,要立刻出现在别人屏幕上。 这些信息有共同特点:临时性强、对实时性要求极高、无需长期存储。把它们每次都写进数据库再通过 CDC 推送,既慢又浪费。广播与在线状态正是为这类「即时但不持久」的需求设计: 广播(Broadcast):客户端之间直接互发消息,低延迟,不落库。
数据库变更订阅适合「数据持久化的实时同步」,但有些场景并不需要落库——比如鼠标光标位置、临时聊天、谁在线。为此 Realtime 提供两种轻量能力:广播(Broadcast)与在线状态(Presence)。本节讲解它们的应用场景与使用思路。
想象一个协作白板应用,需求包括:
这些信息有共同特点:临时性强、对实时性要求极高、无需长期存储。把它们每次都写进数据库再通过 CDC 推送,既慢又浪费。广播与在线状态正是为这类「即时但不持久」的需求设计:
它们与数据库变更订阅共享同一连接,但走的是更轻的通道。
广播的工作方式类似「聊天室」:客户端加入一个频道,向频道发送的消息会被频道内所有成员收到。
适用场景:
广播的特点:
设计广播时要想清楚「这条消息需要持久化吗」。需要持久化(如聊天记录)就应写入数据库并用变更订阅;不需要(如光标位置)才用广播。两者常结合使用。
在线状态用于跟踪并同步频道中「当前有哪些成员、各自什么状态」。它的典型用途:
与广播不同,在线状态由 Realtime 服务维护一份「当前成员及状态」的汇总,并在成员变动时自动同步给所有人。
在线状态的关键特性:
三者常组合使用,覆盖协作应用的全部实时需求。以协作文档为例:
| 需求 | 用什么 |
|---|---|
| 文档内容持久保存、多人编辑同步 | 数据库变更订阅 |
| 各人光标位置实时移动 | 广播 |
| 在线成员列表、谁正在编辑哪段 | 在线状态 |
| 评论区历史保留 | 数据库变更订阅 |
| 「正在输入…」提示 | 广播或 Presence 临时状态 |
这种「持久数据走 CDC、临时信息走广播、成员状态走 Presence」的分工,是协作应用的通用架构。
广播用于低延迟、不持久化的消息互发;在线状态用于跟踪成员及其临时状态。它们与数据库变更订阅分工协作,共同支撑协作类应用。下一节讨论实时连接的工程化问题——性能、重连与连接管理。