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

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

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

(我已经得到了 Etherpad 源代码,但我无法从中弄清楚。如果有人能指出如何利用 Etherpad 的 OT 实施,那就太好了!)

有帮助吗?

解决方案

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

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

其他提示

其中的前波的工程师已经发布了的CoffeeScript实现其协同编辑算法称为ShareJS,现名为 ShareDB的

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

  • 运营转型:例如。

    • 谷歌波OT。该方法基于所谓的木星方法。
    • 分享Js。基于与 Google Wave OT 相同的 OT 算法。
    • Coweb-jsoe。基于 COT——一种非常复杂的 OT 方法,也支持 p2p 消息传播。
    • 打开Coweb。它利用 OpenCoweb-jsoe 为许多类似的问题提供成熟的框架。
    • OT.js 基于 ShareJs 的操作类型。
    • 驱动SDK。一个非常有趣的 API,可以做很多事情 - 例如图表上的协作。
    • SwellRT 是 Apache Wave 的一个分支。是联合的,并且支持富文本。
  • 差分同步:

    • Neil Fraser 的差异匹配补丁。
    • MobWrite 利用 Diff-Match-Patch 算法。
  • CRDT (交换复制数据类型):

    • 有许多不同的 CRDT 算法允许实现共享类型。一些 CRDT 使用 P2P 消息传播,一些依赖于客户端-服务器模型
    • 雅杰 允许您共享任意数据类型(RichText、数组、哈希映射等)可扩展)。离线支持,支持P2P通信协议(有XMPP、Websockets、WebRTC的模块)
    • SwarmJS 具有离线支持的客户端服务器共享数据库。与 React 配合良好
    • 乌特 Woot CRDT 的实现
    • CRDT 另一个 CRDT 实现
    • 自动合并

OT 库:

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

在ot.js库 https://github.com/Operational-Transformation/ot.js 可以是用于多用户的情况有用。

交钥匙,或“拖放”解决这一问题还没有真正存在由于可靠地同步共享可变状态的复杂性。 dmonad的反应是一个体面的综述,和我贴可用的解决方案更先进的最新介绍的此处

这问题是很老,但融合(免责声明:我是创始人)提供了最完整的解决方案在那里,提供不只是数据同步,但建立了协作UX有用的其它API的主机。 这里是显示正是你要求的一个例子:在多个客户端的文本字段同步。

否则, ShareDB 是适合很多人的需求有很大的开源解决方案。

另请查看这些 Javascript 库:

与我的客户端OT LIB(JSOTTEST)建立一个完整的客户端 - 服务器系统沿着一个js客户LIB(Strophe.js),你可以使用免费的XMPP服务器(如jabber.org)。

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

Npm 有一些不错的 Node.js ot 库:

您可以在 Cedanet 交谈的人。虽然CEDA是封闭源代码,不提供免费试用版在他们的网站。我一直在参与CEDA的发展,继续在商业项目,它的工作,所以我也许能,如果你低着头这条道路提供一些反馈/建议。

我东西etherpad.org与EtherPad的精简版是优于其他的解决方案。

我们正在构建,结合运营转型与版本控制一个协作编辑。这样,我们可以同时支持,离线和在线协同合作。昨天我们推出了我们自己的OT库作为我们的开源堆栈的一部分。

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

我们也已经贡献了库版本。

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

我已经写了一个小unixy(做一两件事,把它做好)实现的OT控制层,让您在不同类型的OT塞库(支持所有兼容shareJS类型)。 它类似于shareJS但小于固执和更抽象的。

https://github.com/marcelklehr/gulf

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top