Skip to content
目录

协同编辑

协同以 MUTATION 为同步原子,配合 版本号 / revisionOT 或 CRDT 类合并(具体算法以 Univer 协同包为准),经 RPC / WebSocket 在客户端与协同服务间传递。


1. 架构角色

角色职责
本地 Client产生 MUTATION、应用远端 MUTATION
协同服务排序、广播、持久化 revision
存储Snapshot + 增量 revision 日志

2. 为何用 MUTATION

  • Undo命令拦截 同一抽象。
  • 粒度小于整表 snapshot,带宽更优。
  • 可重放:新客户端从 snapshot + revisions 追赶。

3. 版本与冲突

  • 每个 unit 维护 revision(单调递增)。
  • 本地提交带「基于 revision」;服务端拒绝或合并过期操作。
  • 冲突策略:常见为 服务端权威序 + 客户端回滚重放;细节见官方协同文档。

4. 用户态同步

光标、选区、在线用户列表多为 OPERATION 或独立 presence 通道,不进持久快照,降低噪音。


5. 权限

插件层可拦截 Command:只读、区域锁定、禁止改结构等,在 MUTATION 落地前拒绝。


6. 离线与重连

  • 离线队列缓存本地 MUTATION。
  • 重连后 拉取缺失 revision 再提交队列;冲突时以服务端为准并刷新本地 Model。

7. 性能

  • 合并连续小 MUTATION(debounce)。
  • 大粘贴拆批或专用 COMMAND。
  • 公式重算与协同应用解耦,避免阻塞收包。

8. 总结

协同 = MUTATION 流 + revision;实现功能时保证每条远端变更都能映射为已注册的 MUTATION 类型。

MIT License.