2009-06-12 32 views
0

我正在编写一个Web应用程序,它具有用于编辑数据的用户界面。这个想法与编辑大量文本的wiki相似。处理来自多个用户的异步编辑的最佳方式是什么?我正在考虑的情况是这样的:在Web上处理文档的异步编辑

有一份文件,是版本0.1用户A正在编辑它时,它为0版本几分钟后,但在此之前用户A节省了他的变化,用户B打开了相同文件并开始编辑。服务器应该如何将两个不同的编辑处理为文档的版本0?还有什么是这个问题,我可以从哪里获得有关类似问题的更多信息?

回答

0

Wikipedia解决这个问题的方式如下:

假定用户A和用户B均为编辑同一个文档。此外,假设人的人B.

  • 第一媒体wiki软件运行的传统diffing algorithm在两个编辑稍前提交他们的编辑。
  • 接下来,差异算法的结果用于合并文本。
  • 如果差异算法发现存在合并冲突(即人A和B编辑了相同的文本),则要求人B自从他们上次提交他们的编辑以来解决冲突。

Wikipedia处理合并冲突很像代码库中的冲突。

如果您希望允许多人同时并实时编辑文档(如使用google waveetherpad),那么我建议您查看operational transforms(又名OT)。尽管OT算法不像传统的差异算法那么困难或简单,但它的信息较少,现成的实现较少。

0

一个典型的模式是向每个用户发送一大块文本以及一个指示他们收到哪个版本的版本号。规则是主机只接受当前活动版本的第一个修订版本。

那样只有一个人可以修改每个版本;其他人都会被告知他们的版本已经过时,并且您可以在那时为他们做出想要的 - 通常会向他们发送当前版本以重试。

这只适用于不可能有多个人在同一个版本上工作的人。如果可能的话,那么你可能需要研究Subversion如何处理源代码的多个修订。

还有多个人同时在同一文本上工作并互相提供更新的方案 - 请参阅Google Wave中的一个示例。