实时能力先分清状态和媒体:
- 聊天、通知、在线人数:Worker + Durable Objects,消息进入房间对象,再按需归档。
- 协作文档、白板、多人编辑:一个文档或房间一个 Durable Object,编辑状态进对象。
- 轻量多人游戏:一个局或房间一个 Durable Object,消息批处理,房间按局拆分。
- 单资源限流、锁、顺序写入:一个资源标识一个 Durable Object,写入在对象内排队。
- 音视频会议、课堂、语音房:RealtimeKit / Realtime SFU / TURN,媒体流走实时媒体能力。
一个对象只负责一个协调单元。聊天和协作通常一个房间一个对象;用户状态通常一个用户一个对象;文档、订单、限流桶和游戏局通常一个资源一个对象。列表、搜索和长期历史放到 D1 / R2。
成本主要看四件事:入口 Worker 请求、Durable Objects 运行时长、对象内存储、队列消息。入口 Worker 只做鉴权、路由和轻逻辑;连接休眠是控制常驻成本的主要手段;房间短历史可以放 DO,长历史放 D1 / R2;队列只放慢副作用,消息体尽量小。
- 所有用户进同一个 Durable Object 时,按房间、租户、资源 ID 或用户切对象。
- 长连接持续产生运行成本时,新实时房间优先使用连接休眠。
- 列表和权限对象承担高频消息时,列表只做创建、删除、列表和权限,实时对象处理消息。
- 单个对象变成全站热点时,评估分片、只读副本、子房间或消息归档。
- DO 被当成全局数据库时,列表、搜索、报表落到 D1、R2、搜索或指标能力。
- 音视频媒体流走普通 WebSocket 时,改用 RealtimeKit、Realtime SFU 或 TURN。