协作编辑
Real-time Collaborative Editing
基于CRDT的多用户实时协作编辑系统
子问题
1.WebSocket连接管理
2.CRDT冲突解决
3.画布状态同步
4.编辑器协同
5.双轨同步协议选型与桥接
6.事务化状态快照与版本压缩
7.Singleflight缓存击穿防护
8.前端离线状态与多定时器协调
各项目的解法1 solutions
Signals
横向对比
| 维度 | Refly |
|---|---|
| 同步协议 | 双轨:文档用 Yjs CRDT WebSocket,画布用事务化 HTTP 轮询 |
| 冲突解决 | 文档 CRDT 自动合并;画布三级检测(版本→事务→节点ID)+ 用户选择 |
| 离线支持 | IndexedDB 本地状态 + 200ms 防抖写入 + 后台 2s/3s 双定时器同步 |
| 状态持久化 | OSS 持久化 + Redis write-through 缓存 + singleflight 防击穿 |
| 版本管理 | 100 条事务或 1 小时自动快照,支持 undo/redo 事务撤销 |
| 并发控制 | Redis 分布式锁 + 指数退避重试 + pLimit(5) 并发限制 |
最佳实践
1.使用Yjs CRDT协议而非OT实现无冲突同步
2.图结构数据用事务化diff比CRDT更自然高效
3.Redis write-through+singleflight组合防缓存击穿
4.版本快照按事务数+时间双阈值触发压缩