我正在寻找一个允许我在多个用户之间实时同步文本的库(ala Google Docs)。
我偶然发现了运营转型,这似乎符合我的需求。话虽如此,我了解 OT 的要点,但不了解 OT 的数学和实现。
因此,我想知道是否有一个拖放 Javascript 库可以连接到文本区域,生成转换,然后允许我将这些转换应用到另一个客户端?
(我已经获得了 Etherpad 的源代码,但我无法从中得出结论。如果有人能指出如何利用 Etherpad 的 OT 实现,那也太好了!)
我正在寻找一个允许我在多个用户之间实时同步文本的库(ala Google Docs)。
我偶然发现了运营转型,这似乎符合我的需求。话虽如此,我了解 OT 的要点,但不了解 OT 的数学和实现。
因此,我想知道是否有一个拖放 Javascript 库可以连接到文本区域,生成转换,然后允许我将这些转换应用到另一个客户端?
(我已经获得了 Etherpad 的源代码,但我无法从中得出结论。如果有人能指出如何利用 Etherpad 的 OT 实现,那也太好了!)
我认为 Google Wave 的 OT 实现的部分内容是开源的(而且还会有更多部分)。
我不确定这是否是您正在寻找的,但 OT 的替代方案是差分同步:
一位前 Wave 工程师发布了一个名为 ShareJS 的协作编辑算法的 Coffeescript 实现,现在名为ShareDB。
我将总结我找到的解决方案。
运营转型:例如
差分同步:
CRDT(可交换复制数据类型):
OT 库:
在 HWIOS websocket 项目中,我成功地使用了两者的组合(服务器端的 py-infinote,客户端的 jinfinote)来同步文档状态。
ot.js 库 https://github.com/Operational-Transformation/ot.js可能对多用户场景有用。
由于可靠地同步共享可变状态的复杂性,该问题的交钥匙或“拖放”解决方案实际上并不存在。dmonad 的回应是一个不错的综述,我在此处发布了可用解决方案的最新概述。
这个问题已经很老了,但是Convergence(免责声明:我是创始人)提供了最全面的解决方案,不仅提供数据同步,还提供许多其他 API,可用于构建协作 UX。 这是一个示例,准确显示了您的要求:跨多个客户端同步文本字段。
否则,ShareDB是一个很好的开源解决方案,可以满足很多人的需求。
还可以查看这些 Javascript 库:
Npm 为 node.js 提供了一些不错的 ot 库:
我编写了一个小型 unixy(做一件事并做好)库,它实现了 OT 控制层,允许您插入不同的 OT 类型(支持所有符合 shareJS 的类型)。它类似于 shareJS,但不那么固执,更抽象。
你可以和Cedanet的人谈谈。尽管 Ceda 是封闭源代码,并且他们的网站上没有免费试用版。我一直参与 Ceda 的开发,并继续在商业项目中使用它,所以如果你走这条路,我也许可以提供一些反馈/建议。
使用 js 客户端库(Strophe.js),您可以使用免费的 XMPP 服务器(如 jabber.org)以及我的客户端 OT 库(JSOTTEST)来构建完整的客户端-服务器系统。
有时间修改代码时,我会提交一个演示客户端-服务器聊天系统的 src。
我们正在构建一个将 Operational Transformation 与版本控制相结合的协作编辑器。这样我们就可以同时支持离线和在线协作。我们昨天发布了我们自己的 OT 库,作为我们开源堆栈的一部分。
http://interior.substance.io/modules/operator.html
我们还提供了一个用于版本控制的库。
我认为带有 etherpad lite 的 etherpad.org 优于其他解决方案。