Мониторинг пользовательских сессий для предотвращения редактирования конфликта

Я я работаю над чем-то похожим на pastebin (да, это , что универсально), но допускает многопользовательское редактирование. Очевидная проблема заключается в том, что несколько пользователей пытаются редактировать один и тот же файл. Я думаю о том, как заблокировать файл, когда над ним работает один пользователь (это не лучшее решение, но мне не нужно ничего слишком сложного), но для предотвращения / предупреждения пользователя мне, очевидно, понадобится система контроля за сессиями редактирования каждого пользователя. Работая с базой данных и ajax, я подумываю о двух решениях.

Первое - это когда страница редактирования пингует сервер через произвольный интервал, скажем минуту, и обновляет запись сеанса редактирования в БД. Затем в следующий раз запрос скрипта на редактирование проверяет самый последний пинг, и если самый последний был другой произвольный период назад, скажем, пять минут, тогда мы предполагаем, что предыдущий пользователь вышел и файл может быть отредактирован снова. Конечно, проблема этого метода заключается в том, что предположение о том, что предыдущий пользователь вышел из системы, является просто предположением. У него могло быть слабое соединение Wi-Fi, и он просто пропадал в течение десяти минут, все время с открытым окном.

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

Итак, я пришел, чтобы придумать другое решение. Также возможно получить событие unload , чтобы сработать, когда сеанс пользователя завершится, но я не уверен, будет ли это работать надежно.

Есть ли у кого-нибудь другое, более изящное решение этой проблемы?

5
задан Yi Jiang 27 August 2010 в 12:51
поделиться