OpenCode 客户端消息流是如何确保按序输出的?
· 6 min read
OpenCode 客户端保证消息有序,靠的不是排序算法,而是 "按 partID 分桶 + 桶内就地更新" 的状态合并模型。
核心设计 三 点:
- 每个 part 由服务端分配全局唯一
id,创建顺序 = 渲染顺序 - 后续
part.updated事件按 id 就地覆盖,不动partOrder - 断线重连先拉快照、再续 SSE,幂等更新天然无缝衔接
反面教材:早期每次更新都 setMessages([...messages]) 全量复制,消息一长 CPU 直接飙满。Streaming UI 的性能瓶颈从来不在网络,而在前端的更新粒度。