Crdt代码例子
// 1. 引入 Yjs 库
import * as Y from 'yjs';
import { WebsocketProvider } from 'y-websocket'; // 用于同步
// 2. 创建一个 Yjs 文档
const ydoc = new Y.Doc();
// 3. 创建一个 YMap (类似共享的 JS 对象)
const map = ydoc.getMap('my-map');
// 4. 在本地操作 (CRDT保证合并)
map.set('key1', 'value1'); // 设置值
map.set('key1', 'newValue1'); // 修改值
map.delete('key1'); // 删除 key1 (如果存在)
// 5. 创建一个 YText (用于共享文本)
const text = ydoc.getText('my-text');
text.insert(0, 'Hello'); // 在开头插入 "Hello"
text.insert(5, ' World'); // 在 'o' 后面插入 " World"
// 6. 通过 Provider 同步数据 (例如 WebSocket)
// const provider = new WebsocketProvider('ws://localhost:1234', 'my-room', ydoc);
// 当其他用户修改时, ydoc 会自动更新, 冲突自动解决
CRDT可以用于文档写作,共同编辑