我正在寻找一个允许我在多个用户之间实时同步文本的库(ala Google Docs).
我偶然发现了运营转型,这似乎符合我的需求.话虽如此,我理解OT的要点,但不理解OT的数学和实现.
因此,我想知道是否有一个拖放到文本区域的拖放Javascript库,生成转换,然后允许我将这些转换应用到另一个客户端?
(我已经获得了Etherpad源代码,但我无法做出正面或反面.如果有人能指出如何利用Etherpad的OT实现,那也会很棒!)
我认为Google Wave的OT实现部分是开源的(还有更多部分即将推出).
我不确定这是否是您正在寻找的,但OT的另一种选择是差异同步:
Google-Diff-Match-Patch - 纯文本的Diff,Match和Patch库:" Diff Match和Patch库提供了强大的算法来执行同步纯文本所需的操作. "
Google-MobWrite - 实时同步和协作服务:" MobWrite将表单和Web应用程序转换为协作环境.创建一个简单的单用户系统,添加一行JavaScript,并立即获得协作系统. "(使用Google-Diff -match贴片.)
其中一位前浪潮工程师发布了名为ShareJS的协同编辑算法的Coffeescript实现,现在命名为ShareDB.
我将总结我找到的解决方案.
运营转型:例如
Google Wave OT.该方法基于所谓的木星方法.
ShareJs.基于与Google Wave OT相同的OT算法.
Coweb-jsoe.基于COT - 一种非常复杂的OT方法,也支持p2p消息传播.
OpenCoweb.它利用OpenCoweb-jsoe为大量类似问题提供完整的框架.
OT.js基于ShareJs的操作类型.
DriveSDK.一个非常有趣的API,可以做很多事情 - 例如图表上的协作.
SwellRT是Apache Wave的一个分支.是联合的,并支持富文本.
差异同步:
来自Neil Fraser的Diff-Match-Patch.
MobWrite利用Diff-Match-Patch算法.
CRDT(交换复制数据类型):
有许多不同的CRDT算法允许实现共享类型.一些CRDT与P2P消息传播一起工作,一些CRDT依赖于客户端 - 服务器模型
Yjs允许您共享任意数据类型(RichText,Array,Hash Maps,.. extendable).对P2P通信协议的离线支持和支持(有XMPP,Websockets和WebRTC的模块)
SwarmJS客户端服务器共享数据库,具有脱机支持.适用于React
Woot Woot CRDT的实现
CRDT另一个CRDT实现
Automerge
OT图书馆:
https://github.com/sveith/jinfinote
https://github.com/jvanveen/py-infinote
在HWIOS websocket项目中,我成功地使用了两者的组合(服务器端的py-infinote,客户端的jinfinote)来同步文档状态.
ot.js库 https://github.com/Operational-Transformation/ot.js可能对多用户场景很有用.