运营转型库?


102

我正在寻找一个可以让我在多个用户之间实时同步文本的库(例如Google Docs)。

我偶然发现了“运营转型”,这似乎很适合我的需求。话虽如此,我了解OT的要旨,但不了解OT的数学或实现。

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

(我已经获得了Etherpad的源代码,但是我无法从中脱颖而出。如果有人可以指出如何利用Etherpad的OT实施,那也将很棒!)


搭载火力地堡协同文本编辑器叫做Firepad - firepad.io检查代码得到一些启示github.com/FirebaseExtended/firepad
Tharanga Hewavithana

Answers:


57

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

我不确定这是否是您要寻找的,但是OT的另一种选择是差分同步


6
Diff-Match-Patch与Neil Frasier的差异同步论文(neil.fraser.name/writing/sync)结合在一起就可以了!非常感谢您为我指明了正确的方向。
gamers2000 2010年

据我了解,Diff-Match-Patch以及扩展名为MobWrite(因为后者使用前者)仅支持文本,不支持二进制更改。但是,有一个与HTML表单元素进行协作的演示,这表明它不仅支持纯文本。
gamers2000 2011年

自此回答以来,是否有关于“更多零件即将到来”的好消息?
伯蒂2011年

3
实际上,Google-Diff-Match-Patch旨在实施操作转换的另一种方法,即差分同步,以了解差异,您可以阅读DS的Neil Fraser文档:neil.fraser.name/writing/sync(OT在本文档中称为“事件传递”。它们是两种截然不同的方法。
Benja'2

5
这是旧的,但是如果您介意的话,我已经开源github.com/benjamine/JsonDiffPatch,它对长字符串使用Neil的Diff-Match-Patch,但是它适用于任意js对象图
Benja 2013年

44

一位前Wave工程师发布了一个名为ShareJS的协作编辑算法的Coffeescript实现,现在称为ShareDB


1
与MobWrite使用Google的Diff和Patch相比,ShareJS可能更简单,文档更完整,可重用。
Luke Stanley

33

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

  • 运营转型:例如

    • Google Wave OT。该方法基于所谓的木星方法。
    • ShareJs。基于与Google Wave OT相同的OT算法。
    • Coweb-jsoe。基于COT-一种非常复杂的OT方法,还支持p2p消息传播。
    • OpenCoweb。它利用OpenCoweb-jsoe来为许多类似问题提供完整的框架。
    • OT.js基于ShareJs的操作类型。
    • DriveSDK。一个非常有趣的API,可以完成很多事情-例如,在图形上进行协作。
    • SwellRT是Apache Wave的一个分支。是联盟的,并支持RTF。
  • 差分同步:

    • Neil Fraser的Diff-Match-Patch。
    • MobWrite利用了Diff-Match-Patch算法。
  • CRDT(通信复制数据类型):

    • 有许多不同的CRDT算法可以实现共享类型。一些CRDT可用于P2P消息传播,而某些则依赖于客户端-服务器模型
    • Yjs允许您共享任意数据类型(RichText,Array,Hash Maps..extendable)。脱机支持和对P2P通信协议的支持(有XMPP,Websocket和WebRTC模块)
    • SwarmJS客户端服务器共享的数据库具有脱机支持。与React配合良好
    • 活泉的活泉CRDT的实现
    • CRDT另一个CRDT实现
    • 自动合并





4

由于可靠地同步共享的可变状态的复杂性,因此尚未真正存在用于此问题的统包解决方案或“拖放”解决方案。dmonad的答复是不错的综述,我在此处发布了有关可用解决方案的最新概述。

这个问题已经很老了,但是Convergence(免责声明:我是创始人)提供了最完整的解决方案,不仅提供数据同步,还提供了许多其他API,可用于构建协作式UX。 这是一个确切显示您所请求内容的示例:跨多个客户端同步文本字段。

否则,ShareDB是一个很好的开源解决方案,可以满足很多人的需求。



2

使用js客户端库(Strophe.js),您可以使用免费的XMPP服务器(如jabber.org)以及客户端OT库(JSOTTEST)来构建完整的客户端-服务器系统。

有时间修改代码时,我将提交演示客户端-服务器聊天系统的src。


1
大约两年前,您写了“我将提交演示的src ...”。您曾经完成该演示吗?
布莱恩·奥克利

抱歉...但是我没有时间发布公开演示!但是,使用Bosh lib for php非常简单!再见
user981836 2014年


1

您可以和Cedanet的家伙们谈谈。尽管Ceda是封闭源,并且其网站​​上没有免费试用版。我参与了Ceda的开发,并继续在商业项目中与它合作,因此如果您走这条路,我也许可以提供一些反馈/建议。


1

我认为etherpad lite的etherpad.org优于其他解决方案。


1
您可以通过一些例子来证实etherpad的优势吗?
DL Narasimhan


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.