Обработка асинхронного редактирования документов в Интернете - PullRequest
0 голосов
/ 12 июня 2009

Я пишу веб-приложение с пользовательским интерфейсом для редактирования данных. Идея похожа на вики, где есть правки кусков текста. Каков наилучший способ обработки асинхронных изменений от нескольких пользователей? Ситуация, которую я рассматриваю, такова:

Существует документ версии 0. Пользователь A редактирует его, когда он версии 0. Через несколько минут, но перед тем, как пользователь A сохранит свои изменения, пользователь B открывает тот же документ и начинает редактирование. Как сервер должен относиться к двум различным изменениям в версии 0 документа? Также, как называется эта проблема и где я могу получить больше информации о подобных проблемах?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2009

Википедия решает эту проблему следующим образом:

Предположим, что лицо A и лицо B редактируют один и тот же документ. Также предположим, что человек A представляет свои правки немного раньше, чем человек B.

  • Сначала программное обеспечение media wiki запускает традиционный алгоритм различий в обоих случаях.
  • Далее результаты алгоритма сравнения используются для объединения текста.
  • Если алгоритм сравнения обнаруживает, что существуют конфликты слияния (т. Е. Лицо A и B отредактировали один и тот же фрагмент текста), то человеку B предлагается разрешить конфликты, поскольку они в последний раз представили свои правки.

Википедия обрабатывает конфликты слияния так же, как конфликты в хранилище кода.

Если вы хотите, чтобы несколько человек могли редактировать документ одновременно и в режиме реального времени (например, с помощью google wave или etherpad ), то я бы порекомендовал посмотреть операционные преобразования (он же OT). Хотя алгоритм OT не сложнее и не проще, чем традиционный алгоритм сравнения, в нем меньше информации и меньше готовых реализаций.

0 голосов
/ 12 июня 2009

Одним из типичных шаблонов является отправка каждому пользователю фрагмента текста, а также номера версии, указывающей, какую версию они получили. Правило заключается в том, что хост примет только первую версию текущей активной версии.

Таким образом, только один человек может пересмотреть каждую версию; всем остальным сказали бы, что их версия устарела, и вы можете сделать для них то, что вы хотите, - обычно отправьте им текущую версию, чтобы повторить попытку.

Это работает, только если маловероятно, чтобы над одной версией работало несколько человек. Если это так, то вам, вероятно, нужно изучить, как, например, Subversion обрабатывает несколько ревизий в исходном коде.

Существуют также схемы для нескольких людей, работающих одновременно над одним и тем же текстом и получающих обновления друг друга - см. Google Wave для одного примера.

...