111

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

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

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

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

4

14 回答 14

59

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

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

于 2010-01-11T16:58:10.260 回答
44

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

于 2011-10-18T21:57:52.643 回答
40

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

  • 运营转型:例如

    • 谷歌波 OT。该方法基于所谓的木星方法。
    • 分享Js。基于与 Google Wave OT 相同的 OT 算法。
    • Coweb-jsoe。基于 COT - 一种非常复杂的 OT 方法,也支持 p2p 消息传播。
    • 开放网络。它利用 OpenCoweb-jsoe 为许多类似问题提供一个成熟的框架。
    • OT.js 基于 ShareJs 的操作类型。
    • 驱动SDK。一个非常有趣的 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 实现
    • 自动合并
于 2014-10-25T22:18:07.860 回答
6

OT 库:

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

于 2011-03-04T08:52:29.823 回答
5

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

于 2013-09-11T20:50:01.203 回答
4

https://github.com/opencoweb/coweb

于 2011-09-30T12:29:32.263 回答
4

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

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

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

于 2017-02-06T05:33:52.197 回答
2

还可以查看这些 Javascript 库:

于 2011-08-11T07:22:55.920 回答
2

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

于 2013-02-13T15:44:25.140 回答
2

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

https://github.com/marcelklehr/gulf

于 2016-04-01T20:19:42.137 回答
1

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

于 2010-07-28T07:51:36.383 回答
1

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

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

于 2011-10-06T08:58:05.353 回答
1

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

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

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

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

于 2013-07-10T10:59:01.850 回答
0

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

于 2011-09-23T10:49:21.587 回答