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