第三篇 协同核心:操作与冲突

接入层解决「画得动、连得上、断了能救」,本篇解决更硬的「画得对、画得并」:多人几乎同时画时,笔怎么建模、怎么实时广播、冲突怎么并、历史怎么退。这是白板产品的灵魂,也是技术密度最高的一篇。前面五篇是骨架与语言,本篇是把一群人的操作「正确地」合到一块板上。

本篇脉络

节 主题 要解决的问题
3.1 笔触模型 坐标、样式、时间戳怎么定
3.2 实时广播 服务端怎么中继扇出
3.3 冲突解决 OT 与 CRDT 怎么取舍
3.4 历史回放 日志怎么记、撤销怎么退

为什么冲突是核心

单用户画图没有冲突,多人同时画才有。两个人在相邻位置各画一笔,到达顺序随机,合并规则不统一就会出现「同一区域两个人画的线互相覆盖、画面闪烁、甚至越合越乱」。协同白板的正确性,全押在「怎么合并并发操作」上,本篇围绕它展开。

协同的两类操作

类型 例子 冲突强度
追加型 各画各的笔 低(各占各区域)
修改型 同时改同一条 高(要合并语义)

白板「各画各的」多属追加型,冲突天然弱——这是白板比「协同文档」好做的地方;但「擦除」「移动整组」会跨到修改型,需要合并语义。本篇把两类都覆盖。

本篇的验收线

验收 含义
笔不丢 各人操作最终都上板
不闪烁 合并稳定,画面收敛
可撤销 个人笔、整板都能退

三章讲完,多人白板就从「能动」升级到「正确」。

延伸阅读