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

2022-11-28 11:35:57 +08:00
 ksice

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

2519 次点击
所在节点    程序员
15 条回复
GPLer
2022-11-28 11:45:54 +08:00
可以参考下 am-editor
https://editor.aomao.com/
codehz
2022-11-28 13:13:47 +08:00
menghechina
2022-11-28 13:35:19 +08:00
onlyoffice 了解一下
Huelse
2022-11-28 14:30:32 +08:00
行锁+版本
zhuangzhuang1988
2022-11-28 14:36:59 +08:00
ZSeptember
2022-11-28 14:57:41 +08:00
要实现业务需要找一下开源的,比如 share-js 什么,还有上面提到的一些。

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

Operational Transformation 基本思路也很直接,记录用户操作,然后将操作 apply 到一个文档上,返回 apply 的结果。
ksice
2022-11-28 16:55:10 +08:00
@ZSeptember 嗯呢,好像流行的都是用的 ots 算法,但是感觉 ots 算法很复杂,figma 用的好像是 CRDTs 算法
ksice
2022-11-28 16:56:27 +08:00
@Huelse 现在流行的好像都是采用 ots 和 crts 算法去做的
ksice
2022-11-28 16:57:31 +08:00
@zhuangzhuang1988 好的好的,谢谢我去研究一下看看
ksice
2022-11-28 17:01:43 +08:00
@GPLer 好的好的谢谢
L1shen
2022-11-28 17:16:45 +08:00
现在新的都是使用 CRDT 来实现协同编辑,
yjs 的包装可以看下这个 https://syncedstore.org/docs/advanced/richtext
Facebook 的 lexical 也支持使用 yjs 做协同 https://lexical.dev/docs/collaboration/react
ZSeptember
2022-11-28 17:37:05 +08:00
CRDT 这么 6 ,直接在结构上解决冲突。
hamsterbase
2022-11-28 21:51:16 +08:00
@codehz 这论文不错,之前看了好几遍把里面的数据结构都实现了。
ksice
2022-11-29 09:50:27 +08:00
@ZSeptember 嗯嗯相对 ots ,crdts 简单一些
xieqiqiang00
2022-11-29 15:57:19 +08:00
@menghechina #3 这个怎么感觉是硬抄 office

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/898447

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX