运营转型库?

gam*_*000 100 transform operational etherpad

我正在寻找一个允许我在多个用户之间实时同步文本的库(ala Google Docs).

我偶然发现了运营转型,这似乎符合我的需求.话虽如此,我理解OT的要点,但不理解OT的数学和实现.

因此,我想知道是否有一个拖放到文本区域的拖放Javascript库,生成转换,然后允许我将这些转换应用到另一个客户端?

(我已经获得了Etherpad源代码,但我无法做出正面或反面.如果有人能指出如何利用Etherpad的OT实现,那也会很棒!)

Jör*_*tag 56

我认为Google Wave的OT实现部分是开源的(还有更多部分即将推出).

我不确定这是否是您正在寻找的,但OT的另一种选择是差异同步:

  • Diff-Match-Patch与Neil Frasier的差异同步文件(http://neil.fraser.name/writing/sync/)结合使用!非常感谢指出我正确的方向. (6认同)
  • 这是旧的,但如果你介意,我有开源https://github.com/benjamine/JsonDiffPatch它使用Neil的Diff-Match-Patch长字符串,但它适用于arbritrary js对象图 (5认同)
  • 实际上,Google-Diff-Match-Patch旨在实现操作转换的替代方法,即差异同步,以了解您可以阅读DS的Neil Fraser文档的差异:http://neil.fraser.name/writing/sync /(OT在本文档中称为事件传递).它们是两种截然不同的方法. (3认同)

haw*_*eye 42

其中一位前浪潮工程师发布了名为ShareJS的协同编辑算法的Coffeescript实现,现在命名为ShareDB.


dmo*_*nad 27

我将总结我找到的解决方案.

  • 运营转型:例如

    • 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


小智 6

OT图书馆:

在HWIOS websocket项目中,我成功地使用了两者的组合(服务器端的py-infinote,客户端的jinfinote)来同步文档状态.


Jar*_*nal 5

ot.js库 https://github.com/Operational-Transformation/ot.js可能对多用户场景很有用.