运营转型库?

我正在寻找一个图书馆,允许我实时同步多个用户(ala Google文档)之间的文本。

我偶然发现了运营转型,这似乎符合我的需求。 话虽如此,我明白OT的要旨,但不是OT的math和实施。

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

(我已经得到了Etherpad的资源,但是我不能从头开始,如果有人能指出如何利用Etherpad的OT实现,那也太棒了!)

我认为Google Wave的OT部分实现是开放源码(更多部分即将到来)。

我不确定这是否是您正在寻找的,但OT的替代scheme是差分同步 :

  • Google-Diff-Match-Patch – 用于纯文本的Diff,Match和Patch库 :“ Diff Match和Patch库提供强大的algorithm来执行同步纯文本所需的操作。
  • Google-MobWrite – 实时同步和协作服务 :“ MobWrite将表单和Web应用程序转换为协作环境,创build一个简单的单用户系统,添加一行JavaScript,并即时获得协作系统。 ”(使用Google-Diff -match贴片。)

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

我将总结我find的解决scheme。

  • 运营转型:例如

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

    • 来自Neil Fraser的Diff-Match-Patch。
    • MobWrite利用Diff-Match-Patchalgorithm。
  • CRDT (交换复制数据types):

    • 有许多不同的CRDTalgorithm允许实现共享types。 一些CRDT使用P2P消息传播,一些依赖于客户端 – 服务器模型
    • Yjs允许你共享任意数据types(RichText,Array,Hash Maps,.. extendable)。 离线支持和支持P2P通信协议(有XMPP,Websockets和WebRTC模块)
    • 具有脱机支持的SwarmJS客户端服务器共享数据库。 适用于React
    • Woot Woot CRDT的实现
    • CRDT另一个CRDT实现

OT图书馆:

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

对于这个问题的交钥匙或“拖放”解决scheme由于可靠地同步共享可变状态的复杂性并不存在。 dmonad的回应是一个体面的综合报道,我在这里发布了一个更新的可用解决scheme的最新概述。

这个问题相当陈旧,但是Convergence (免责声明:我是创始人)提供了最全面的交钥匙解决scheme,不仅提供了数据同步,还提供了大量可用于构build协作UX的其他API。 以下示例显示了您请求的内容:跨多个客户端的文本字段的同步。

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

另外检查这些Javascript库:

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

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

Npm有一些很好的node.js的库:

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

我的事情etherpad.org与etherpad lite是优于其他解决scheme。

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

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

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

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

我写了一个实现OT控制层的小型unixy(做一件事,做得很好)库,允许你插入不同的OTtypes(支持所有的shareJS兼容types)。 这与共享相似,但较less自以为是,更抽象。

https://github.com/marcelklehr/gulf