Я подумывал о разработке некоторой простой блокировки записей для приложения, в котором я участвую. Есть несколько пользователей, которые буквально будут часов, чтобы закончить редактирование записи. Это вызывает проблемы, когда кто-то хочет внести изменения в запись. В настоящее время нет блокировки.
Я не уверен, что оптимистическая блокировка надежна в моем случае, так как запись сохраняется через запрос AJAX. Я смотрю на применение своего пессимистического блокирования; используя два поля, такие как lock_user_id и locking_timestamp , я могу отслеживать, кто открыт для записи, и в последний раз, когда он был открыт.
Но поскольку пользователь может открывать его в течение нескольких часов, как я могу узнать, отказался ли пользователь от него или просто усердно работает над этим? Я не хочу заставлять их обновлять его каждые 5 минут ~, но это может быть возможностью (AJAX сохраняется каждые 5 минут).
Возможно, процесс jQuery может рассчитывать, пока пользователь работает, и каждые 5 минут сбрасывает запрос AJAX (getJSON), чтобы обновить lock_timestamp. Таким образом, я мог бы поддерживать, кто работает над записью. После того, как временная метка станет «старой», я могу предположить, что пользователь больше не работает с reocrd. Имел ли кто-нибудь опыт такого рода блокировки?
Обновление lock_timestamp с помощью запросов AJAX является прекрасной стратегией и будет хорошо работать.
Тем не менее, 5-минутный интервал между вызовами кажется мне немного длинным. Если у вас действительно высокий трафик, примерно 30 секунд будет лучше с точки зрения пользователя. Представьте, что кому-то нужно подождать 5 минут, потому что другой пользователь открыл запись, а затем закрыл свой браузер …
Возможно, я глуп, но как насчет того, что jQuery отслеживает события мыши и клавиатуры на странице.
PHP помещает блокировку где-то в файловой системе или какой-то флаг в записи базы данных, поэтому следующий пользователь не сможет редактировать, а просто просматривать информацию. Файл будет содержать информацию пользователя в записи, поэтому, когда изменения отправляются, принимаются только его изменения
Хотя первый пользователь имеет активность на странице, ничего не происходит. 3 минуты пользователь ничего не делает, и ему будет предложено либо подтвердить, что он все еще работает над ним, либо он в течение 3 минут потеряет свои текущие изменения. Если он подтверждает, что ничего не происходит, но если он не удалит Ajax блокировку.
Если вы говорите, что пользователи могут занять несколько часов перед отправкой записи, тогда просто заблокировать 5 минут или что-то еще не будет.
Вместо этого, почему бы вам не реализовать какую-либо функцию проверки / проверки, которая была бы активирована (выписана) при редактировании записи и «сохранена» через равные промежутки времени и деактивирована (зарегистрирована), когда запись была сохраненный / сеанс истек / браузер закрыт / и т. д.