2010-01-11 67 views
93

我正在寻找一个能让我在多个用户(ala Google Docs)之间实时同步文本的库。运营转型库?

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

因此,我想知道是否有一个drag'n'drop Javascript库会挂钩到文本区域,生成转换,然后允许我将这些转换应用到另一个客户端?

(我已经得到了EtherPad的源,但我不能使头部或尾部出来。如果有人能指出如何在EtherPad的的OT实现充分利用,那将是巨大的!)

回答

52

我认为Google Wave的OT实施的部分内容是开放源代码(以及更多部分即将推出)。

我不知道如果这是你在找什么,但OT另一种是Differential Synchronization

+5

Diff-Match-Patch与Neil Frasier的差分同步纸(http://neil.fraser.name/writing/sync/)结合起来了! 非常感谢您指点我正确的方向。 – gamers2000 2010-01-14 14:11:24

+0

此解决方案仅适用于纯文本吗? – Jimmy 2011-03-06 08:42:01

+0

根据我的理解,Diff-Match-Patch和扩展名MobWrite(因为后者使用前者)仅支持文本,而不支持二进制更改。但是,有一个与HTML表单元素协作的演示,这将表明它不仅支持纯文本。 – gamers2000 2011-04-23 02:59:21

1

您可以与Cedanet联系。尽管Ceda是封闭源代码,并且他们的网站上没有免费试用版。我一直参与Ceda的开发,并继续在商业项目中使用它,所以如果你走上这条道路,我可能会提供一些反馈/建议。

1

我的事情etherpad.org与EtherPad的精简版是优于其他解决方案。

+1

你能用一些例子来证实etherpad的优越性吗? – 2015-04-13 11:27:10

2

有了一个js客户LIB(Strophe.js),你可以使用免费的XMPP服务器(如jabber.org)与我的客户端OT LIB(JSOTTEST)一起建立一个完整的客户端 - 服务器系统。

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

+1

大约两年前,你写下“我将提交演示的源代码...”。你有没有完成该演示? – 2013-09-08 13:50:28

+0

对不起...但我没有时间发布公开演示!但是使用Bosh lib for php非常简单!再见 – user981836 2014-05-05 22:31:31

41

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

+1

ShareJS可能比MobWrite用Google的Diff和Patch更简单,记录更好,可重用性更高。 – 2012-08-21 00:35:57

20

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

  • 运营转型:例如,

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

    • DIFF-比赛贴片尼尔·弗雷泽。
    • MobWrite利用Diff-Match-Patch算法。
  • CRDT(可交换复制数据类型):

    • 有很多的不同CRDT算法,允许共享类型的实现。一些CRDT与P2P消息传播一起工作,一些依赖于客户端服务器模型
    • Yjs允许您共享任意数据类型(RichText,阵列,哈希映射,..可扩展)。脱机支持和支持P2P通信协议(有XMPP,Websockets和WebRTC的模块)
    • SwarmJS客户端服务器共享数据库,提供脱机支持。工程以及与之反应
    • Woot的活泉CRDT
    • CRDT一个实现另一个CRDT实施
+0

Google Drive API使用OT not DS。 https://developers.google.com/drive/realtime/conflict-resolution – 2015-04-17 13:37:52

0

我已经写了一个小unixy(做一两件事,把它做好)实现的OT库控制层,允许您插入不同的OT类型(支持所有符合JS标准的类型)。 它与shareJS相似,但较少自以为是,更抽象。

https://github.com/marcelklehr/gulf

3

交钥匙,或“拖放”到这个问题的解决方案还没有真正存在由于可靠的同步共享的可变状态的复杂性。 dmonad的回应是一个体面的综合报道,我发布了一个更新的可用解决方案概览here。这个问题是相当古老的,但Convergence(免责声明:我是一个创始人)提供了最全面的交钥匙解决方案,不仅提供数据同步,还提供了大量其他API用于构建协作用户体验。 Here is an example准确显示您请求的内容:跨多个客户端的文本字段的同步。

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