运营转型库?
我正在寻找一个图书馆,允许我实时同步多个用户(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库:
- https://github.com/vitotafuni/JSOTTEST <客户端Javascript实现
- https://github.com/fitzgen/operational-transformation-example <Node JS客户端/服务器实现
使用js客户端库(Strophe.js),您可以使用免费的XMPP服务器(如jabber.org)以及客户端OT lib(JSOTTEST)来构build完整的客户端 – 服务器系统。
当我有时间修改代码时,我将提交演示客户端 – 服务器聊天系统的src。
Npm有一些很好的node.js的库:
- https://npmjs.org/package/ot – 内置codemirror和ace的适配器以及客户端和服务器实现
- https://npmjs.org/package/changesets – 在节点和浏览器中可用的简单的库; 允许您创build“变更集”(本质上是差异),您可以发送,相互转换并应用于文档
你可以和Cedanet的家伙交谈 。 尽pipeCeda是封闭源代码,并且在他们的网站上没有免费试用版。 我一直参与Ceda的开发,并继续在商业项目中使用它,所以如果你走上这条道路,我可能会提供一些反馈/build议。
我的事情etherpad.org与etherpad lite是优于其他解决scheme。
我们正在构build一个将操作转换与版本相结合的协作编辑器。 这样我们可以同时支持离线和在线协作。 我们昨天发布了自己的OT库,作为我们的开源堆栈的一部分。
http://interior.substance.io/modules/operator.html
我们还贡献了一个版本库。
我写了一个实现OT控制层的小型unixy(做一件事,做得很好)库,允许你插入不同的OTtypes(支持所有的shareJS兼容types)。 这与共享相似,但较less自以为是,更抽象。