Много слов ниже, извините, но я хотел хорошо объяснить эту ситуацию:
Я нахожусь в процессе создания системы, которая позволяет любому зарегистрированному пользователю редактировать один документ, но я нене хочу, чтобы несколько пользователей могли редактировать этот документ одновременно.
(Просто для справки, я планирую разместить на своем веб-сайте неограниченное количество этих документов, и пользователи смогут создавать новые документыПо сути, представьте себе Google Docs, но только один пользователь может редактировать документ одновременно.
В настоящее время у меня есть решение JavaScript / AJAX / PHP, которое включает в себя для каждого документа базу данных, хранящуюся в базе данных.переменная, которая содержит идентификатор пользователя, который в данный момент редактирует этот документ.Никакие другие пользователи не могут редактировать документ до тех пор, пока этот пользователь не завершит работу, и документ
Когда пользователь «завершил» редактирование (что означает, что он либо закрыл окно редактирования, либо сохранил свои изменения), документ становится доступнымлюбому другому пользователю еще раз ... или, по крайней мере, должен в теории.Для приложения, которое я разрабатываю, важно, чтобы документ стал доступен как можно скорее.Это не проблема, если пользователь, выполняющий редактирование, сохраняет свои изменения, но проблема, если пользователь закрывает окно редактирования и не сохраняет никаких изменений.
Мои текущие настройки для учета несохраненияслучай, это сделать периодический вызов AJAX на страницу php, которая по сути говорит: «Я все еще редактирую. Дайте мне еще две минуты на редактирование».Итак, если пользователь закроет страницу, документ станет доступен каждому в течение двух минут.Это слишком долго для того, что мне нужно.Мне бы очень хотелось, чтобы это было как можно ближе к реальному времени (хотя задержка <10 секунд не будет ужасной). </p>
Эти документы общедоступны, и их статусы отображаются в виде списка.Когда пользователь загружает страницу «Просмотр доступных документов», мне нужно выполнить запрос, чтобы проверить состояние всех последних документов, которые должны быть показаны, сделать документы с истекшим временем редактирования доступными и отобразить их с текущими доступными.
Почему этот метод плохой: когда тонна пользователей одновременно использует это веб-приложение, в нем СКОЛЬКО слишком много запросов, проверок и обновлений AJAX.
Есть ли лучший способ сделать это?(Надеюсь!)
Другая информация: -Я пытался использовать window.unload (для отправки вызова AJAX на страницу «Я закончил редактирование»), но для ajax не хватает временивызов для выполнения.-Я не думаю, что мой хостинг-провайдер позволил бы использовать постоянные PHP-скрипты (и я также не имею опыта работы с постоянными php-скриптами).-Даже если бы я мог использовать постоянный PHP-скрипт, я был бы обеспокоен соответствующей обработкой, если бы мне пришлось запускать тонну этих скриптов одновременно.(100? 1000? Больше? Я не знаю, сколько вычислительной мощности можно было бы использовать.) - Я не могу запускать задания cron.-Если у меня есть клиенты, которые редактируют AJAX-скрипт «Я все еще редактирую», который запускается каждые 10 секунд, а не каждую минуту, это будет МНОГО вызовов AJAX в секунду, если у меня много пользователей, что приведетк большому количеству доступа к БД, что не было бы замечательно.
Я понимаю, что потребности, которые я здесь представил, вероятно, исключают кучу других хороших потенциальных решений, но мне интересно, может ли кто-нибудь подуматьлюбых других возможных способов сделать это.
Спасибо!
Редактировать: (Добавление соответствующего ответа на комментарий)
К сожалению, это не настоящие файлы.Это своего рода виртуальных составных файлов , которые состоят из отдельных вкладов пользователей.Представьте себе одну страницу, которая вместо единого набора текста представляла собой набор последовательно представленных (сверху вниз) сегментов текста, которые в совокупности составляют полный документ.Каждый отправленный пользователем сегмент является коротким и хранится отдельно в базе данных.--- Странно, я знаю, но полезно и необходимо для этого проекта.