0

我正在编写一个具有用于编辑数据的用户界面的 Web 应用程序。这个想法类似于对文本块进行编辑的 wiki。处理来自多个用户的异步编辑的最佳方式是什么?我正在考虑的情况是这样的:

有一个版本为 0 的文档。当版本为 0 时,用户 A 正在对其进行编辑。几分钟后,但在用户 A 保存更改之前,用户 B 打开了同一个文档并开始编辑。服务器应如何处理对文档版本 0 的两次不同编辑?另外这个问题叫什么,我在哪里可以获得有关类似问题的更多信息?

4

2 回答 2

0

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

这样每个版本只有一个人可以修改;其他所有人都会被告知他们的版本已过时,您可以在那时为他们做任何您想做的事情 - 通常将当前版本发送给他们以重试。

这仅在不太可能有多个人在同一个版本上工作时才有效。如果有可能,那么您可能需要研究 subversion 如何处理对源代码的多个修订。

还有一些方案可以让多人同时处理相同的文本并互相提供更新——参见 Google Wave 的一个例子。

于 2009-06-12T07:05:39.773 回答
0

维基百科通过以下方式解决了这个问题:

假设 A 和 B 都在编辑同一个文档。还假设 A 人在 B 人之前提交他们的编辑。

  • 首先,媒体 wiki 软件对两种编辑都运行传统的差异算法。
  • 接下来,使用 diffing 算法的结果来合并文本。
  • 如果 diffing 算法发现存在合并冲突(即人 A 和 B 编辑了同一段文本),则要求人 B 解决冲突,因为他们最后提交了他们的编辑。

维基百科处理合并冲突很像代码存储库中的冲突。

如果您想允许多人同时实时编辑文档(例如使用google waveetherpad),那么我建议您研究操作转换(又名 OT)。虽然 OT 算法并不比传统的 diffing 算法更难或更简单,但它的信息较少,现成的实现也较少。

于 2009-11-14T15:36:10.770 回答