实时协作-yjs基本理解

📅
1 分钟阅读
·

Yjs 是开源 JavaScript 库,实现基于 CRDT(Conflict-free Replicated Data Type)的共享数据类型。多个用户可以在没有中心协调者的条件下并发编辑共享数据。

Yjs 的基本原理可概括为:

  1. 数据结构:Yjs 提供多种 CRDT 数据结构,如用于协作文本编辑的 Y.Text、用于协作列表编辑的 Y.Array。这些结构允许多个用户并发修改,并使副本最终收敛到一致状态。
  2. 唯一标识符:Yjs 为插入字符、删除列表元素等操作分配全局唯一标识符。该标识符由用户唯一 ID 和递增计数器组成,用于追踪操作并处理并发修改。
  3. 向量时钟:Yjs 使用向量时钟跟踪操作顺序。向量时钟将用户唯一 ID 映射到该用户的操作计数器;比较两个向量时钟可以确定操作的顺序关系。
  4. 操作日志:操作应用到 Yjs 数据结构后会加入操作日志。Yjs 使用操作日志生成差异(delta)并发送给其他副本,接收方据此更新本地状态。
  5. 冲突解决:两个并发操作修改同一数据元素时,Yjs 根据唯一标识符处理冲突。标识符相同表示同一操作;标识符不同则按其顺序决定接受的操作。

Yjs 可运行在 WebSocket、WebRTC、HTTP 等网络协议之上,可配合 IndexedDB、LevelDB 等数据持久化库,也可与 CodeMirror、ProseMirror 等协作编辑框架集成。


69 字 · 8 段落
ximing

Follow onGitHub

相关文章