ksice
V2EX  ›  程序员

如何实现一个共同协作的文件编辑

By ksice at 2022 年 11 月 28 日 · 3711 次点击

向万能的 v 友请教一下,如何实现在线协作编辑文档例如 figma 、墨刀这种功能设计,目前找了一个开源的 etherpad-lite ,想讨论一下是否有其他选择

15 条回复  •  2022-11-29 15:57:19 +08:00
GPLer
   1
GPLer  
   2022 年 11 月 28 日 via Android
可以参考下 am-editor
https://editor.aomao.com/
codehz
   2
codehz  
   2022 年 11 月 28 日
menghechina
   3
menghechina  
   2022 年 11 月 28 日
onlyoffice 了解一下
Huelse
   4
Huelse  
   2022 年 11 月 28 日
行锁+版本
zhuangzhuang1988
   5
zhuangzhuang1988  
   2022 年 11 月 28 日
looplj
   6
looplj  
   2022 年 11 月 28 日
要实现业务需要找一下开源的,比如 share-js 什么,还有上面提到的一些。

要理解原理,基本都是使用 Operational Transformation 这种方式的,然后不同的实现可能解决冲突的算法不同。

Operational Transformation 基本思路也很直接,记录用户操作,然后将操作 apply 到一个文档上,返回 apply 的结果。
ksice
   7
ksice  
OP
   2022 年 11 月 28 日
@ZSeptember 嗯呢,好像流行的都是用的 ots 算法,但是感觉 ots 算法很复杂,figma 用的好像是 CRDTs 算法
ksice
   8
ksice  
OP
   2022 年 11 月 28 日
@Huelse 现在流行的好像都是采用 ots 和 crts 算法去做的
ksice
   9
ksice  
OP
   2022 年 11 月 28 日
@zhuangzhuang1988 好的好的,谢谢我去研究一下看看
ksice
   10
ksice  
OP
   2022 年 11 月 28 日
@GPLer 好的好的谢谢
L1shen
   11
L1shen  
   2022 年 11 月 28 日
现在新的都是使用 CRDT 来实现协同编辑,
yjs 的包装可以看下这个 https://syncedstore.org/docs/advanced/richtext
Facebook 的 lexical 也支持使用 yjs 做协同 https://lexical.dev/docs/collaboration/react
looplj
   12
looplj  
   2022 年 11 月 28 日
CRDT 这么 6 ,直接在结构上解决冲突。
hamsterbase
   13
hamsterbase  
   2022 年 11 月 28 日
@codehz 这论文不错,之前看了好几遍把里面的数据结构都实现了。
ksice
   14
ksice  
OP
   2022 年 11 月 29 日
@ZSeptember 嗯嗯相对 ots ,crdts 简单一些
xieqiqiang00
   15
xieqiqiang00  
   2022 年 11 月 29 日
@menghechina #3 这个怎么感觉是硬抄 office
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
© 2026 V2EX · 34ms · 3.9.8.5