运营转型库?

Posted

技术标签:

【中文标题】运营转型库?【英文标题】:Operational Transformation library? 【发布时间】:2011-01-03 19:55:49 【问题描述】:

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

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

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

(我已经获得了 Etherpad 的源代码,但我无法从中看出端倪。如果有人能指出如何利用 Etherpad 的 OT 实现,那就太好了!)

【问题讨论】:

由 Firebase 提供支持的名为 Firepad 的协作文本编辑器 - firepad.io 检查代码以获得一些灵感 github.com/FirebaseExtended/firepad 【参考方案1】:

我认为 Google Wave 的 OT 实施的部分内容是开源的(而且还会有更多部分)。

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

Google-Diff-Match-Patch - Diff, Match and Patch libraries for Plain Text:“Diff Match 和 Patch 库提供了强大的算法来执行同步纯文本所需的操作。” Google-MobWrite - Real-time Synchronization and Collaboration Service:“MobWrite 将表单和 Web 应用程序转换为协作环境。创建一个简单的单用户系统,添加一行 JavaScript,立即得到一个协作系统。”(使用 Google-Diff-匹配补丁。)

【讨论】:

Diff-Match-Patch 结合 Neil Frasier (neil.fraser.name/writing/sync) 的差分同步论文成功了!非常感谢您为我指明了正确的方向。 据我了解,Diff-Match-Patch 以及扩展,MobWrite(因为后者使用前者)仅支持文本,而不支持二进制更改。但是,有一个与 html 表单元素协作的演示,这表明它不仅支持纯文本。 自从这个答案以来,“还有更多的部分即将到来”有什么好消息吗? 实际上,Google-Diff-Match-Patch 旨在实现 Operational Transformations 的替代方法,即差分同步,了解差异可以阅读 DS 的 Neil Fraser 文档:neil.fraser.name/writing/sync (OT 在本文档中被称为事件传递)。它们是两种截然不同的方法。 这是旧的,但如果你介意,我已经开源了 github.com/benjamine/JsonDiffPatch 它使用 Neil 的 Diff-Match-Patch 处理长字符串,但它适用于任意 js 对象图【参考方案2】:

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

【讨论】:

ShareJS 可能比 MobWrite 对 Google 的 Diff 和 Patch 所做的更简单、更好地记录和更可重用。【参考方案3】:

我会总结一下我找到的解决方案。

运营转型:例如

Google Wave OT。该方法基于所谓的 Jupiter 方法。 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 消息传播,一些依赖于客户端-服务器模型 Yjs 允许您共享任意数据类型(RichText、Array、Hash Maps、.. 可扩展)。离线支持和支持 P2P 通信协议(有 XMPP、Websockets 和 WebRTC 模块) SwarmJS 具有离线支持的客户端服务器共享数据库。与 React 配合得很好 Woot Woot CRDT 的实现 CRDT 另一个 CRDT 实现 Automerge

【讨论】:

Google Drive API 使用 OT 而不是 DS。 developers.google.com/drive/realtime/conflict-resolution【参考方案4】:

OT 库:

https://github.com/sveith/jinfinote https://github.com/jvanveen/py-infinote

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

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

https://github.com/opencoweb/coweb

【讨论】:

【参考方案7】:

由于可靠地同步共享可变状态的复杂性,该问题的交钥匙或“拖放”解决方案实际上并不存在。 dmonad 的回复是一个不错的综述,我发布了关于可用解决方案here 的更新概述。

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

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

【讨论】:

【参考方案8】:

还可以查看这些 Javascript 库:

https://github.com/vitotafuni/JSOTTEST https://github.com/fitzgen/operational-transformation-example

【讨论】:

【参考方案9】:

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

https://npmjs.org/package/ot -- 内置的 codemirror 和 ace 适配器以及客户端和服务器实现 https://npmjs.org/package/changesets -- 可以在节点和浏览器中使用的普通 ot 库;允许您构建可以发送、相互转换并应用于文档的“变更集”(本质上是差异)

【讨论】:

【参考方案10】:

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

https://github.com/marcelklehr/gulf

【讨论】:

【参考方案11】:

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

【讨论】:

【参考方案12】:

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

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

【讨论】:

大约两年前,您写“我将提交一个演示的 src...”。你完成那个演示了吗? 对不起...但我没有时间发布公开演示!然而,使用 Bosh lib for php 非常简单!再见【参考方案13】:

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

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

我们还提供了一个用于版本控制的库。

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

【讨论】:

【参考方案14】:

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

【讨论】:

你能用一些例子来证明 etherpad 的优越性吗?

以上是关于运营转型库?的主要内容,如果未能解决你的问题,请参考以下文章

UST 智享数字化IT运营平台:让企业数字化转型更简单

收入增速环比抬升!从业务数据透视运营商转型战略布局

可视化运营管理--罗浮MES系统助力企业制造转型

Nutanix Prism助力企业提高运营效率,加快企业数字化转型

房地产数字化转型方案:全方位数智化系统运营,助力房企管控实效提升

房地产数字化转型方案:全方位数智化系统运营,助力房企管控实效提升