运营转型库?

时间:2010-01-11 16:30:04

标签: transform etherpad operational

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

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

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

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

14 个答案:

答案 0 :(得分:56)

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

我不确定这是否是您正在寻找的,但OT的替代方案是Differential Synchronization

答案 1 :(得分:42)

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

答案 2 :(得分:24)

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

  • 运营转型:例如

    • 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

答案 3 :(得分:6)

OT图书馆:

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

答案 4 :(得分:5)

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

答案 5 :(得分:4)

答案 6 :(得分:4)

交钥匙,或者"拖放"由于可靠地同步共享可变状态的复杂性,这个问题的解决方案还没有真正存在。 dmonad的回复是一个不错的综述,我发布了可用解决方案here的最新概述。

这个问题已经过时了,但是Convergence(免责声明:我是创始人)提供了最全面的解决方案,不仅提供数据同步,还提供了许多其他有助于构建协作用户体验的API。 Here is an example准确显示您的请求:跨多个客户端同步文本字段。

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

答案 7 :(得分:2)

另请查看这些Javascript库:

答案 8 :(得分:2)

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

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

答案 9 :(得分:2)

Npm为node.js提供了一些不错的ot库:

答案 10 :(得分:1)

你可以在Cedanet与这些人交谈。虽然Ceda是封闭源,但他们的网站上没有免费试用版。我参与了Ceda的开发并继续在商业项目中使用它,所以如果你沿着这条路走下去,我或许可以提供一些反馈/建议。

答案 11 :(得分:1)

我使用etherpad lite的etherpad.org优于其他解决方案。

答案 12 :(得分:1)

我们正在构建一个将操作转换与版本控制相结合的协作编辑器。这样我们就可以同时支持离线和在线协作。我们昨天发布了自己的OT库,作为我们的开源堆栈的一部分。

http://interior.substance.io/modules/operator.html

我们还为版本控制贡献了一个库。

http://interior.substance.io/modules/chronicle.html

答案 13 :(得分:0)

我编写了一个实现OT控制层的小型unixy(做一件事,做得好)库,允许您插入不同的OT类型(支持所有shareJS兼容类型)。 它类似于shareJS,但不那么自以为是,而且更抽象。

https://github.com/marcelklehr/gulf