7

研究 Meteor 来创建一个协作文档编辑应用程序,因为 Meteor 默认在多个客户端之间同步数据非常棒。

但是当使用文本区域时,例如 Sameer Kalburgi 的示例
http://www.skalb.com/2012/04/16/creating-a-document-sharing-site-with-meteor-js/
http://docshare -tutorial.meteor.com/
体验欠佳。

我尝试与同事同时打字,但当她打字时,我的更改会被覆盖,反之亦然。所以在冲突解决中还没有合并算法,我想?

这是为该功能计划的吗?目前有没有办法实现这一点?Etherpad 似乎很好地处理了这个问题。在 Meteor 中使用此功能将使创建协作文档编辑应用程序更容易访问。

4

3 回答 3

8

所以我进一步研究了它,Etherpad 中使用的算法被称为操作转换:

解决方案是运营转型 (OT)。如果你没听说过,OT是一类做多站点实时并发的算法。OT 就像实时 git。它适用于任何延迟(从零到延长假期)。它允许用户以低带宽进行实时、并发编辑。OT 为您提供多个用户之间的最终一致性,无需重试、无错误且不会覆盖任何数据。

不幸的是,实施 OT 很糟糕。有一百万种算法具有不同的权衡,主要被困在学术论文中。正确实施这些算法非常困难且耗时。我们需要一些好的库,所以任何项目都可以在需要时插入 OT。

那是来自sharejs的网站。一个基于 node.js 的 ot 服务器客户端,您可以将其挂接到现有客户端。

OT 也在 Node.js 的 Racer 模型同步引擎中实现,它构成了 Derby 的基础。目前,derby.js 还没有透明地提供它,但他们也在计划,来自Derby 文档

目前,Racer 默认按收到的顺序应用所有事务,即最后写入者获胜。(...) Racer [还]支持通过软件事务内存 (STM)、操作转换 (OT) 和 Diff-match-patch 技术的组合解决冲突。

这些功能尚未完全实现,但 Racer 演示展示了 STM 和 OT 的初步示例。

巧合的是,sharejs 和 derbyjs 团队都有一位前 Google-waver 加入。Meteor 在其核心团队中有一个前 etherpad/Google Waver。由于 Etherpad 是最知名的 OT 实现之一,我想象 Meteor 肯定会在某个时候也支持它……</p>


于 2012-08-23T11:16:14.223 回答
4

我创建了一个集成了 ShareJS 的 Meteor 智能包:

https://github.com/mizzao/meteor-sharejs

现在还很初步,但是您可以将其导入您的应用程序,放入textareas 中,它“就可以工作”。请尝试一下并通过拉取请求提交一些新功能:)

在此处查看演示:

http://documents.meteor.com

于 2013-06-25T19:48:15.247 回答
0

你所描述的似乎超出了我的 Meteors 范围。它不是建立协作可能性的工具!

它提供的是一种透明地处理服务器数据库子集的方法。但是特定于用例的合并功能的实现是应用程序的工作,而不是框架的工作。

于 2012-08-14T16:39:32.527 回答