Как правильно реализовать блокировку документа при совместной работе?

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

Использование поллинга, хоть и самое очевидное решение, но с множеством недостатков. Проблемы так же возникают с долгоживущими соединениями, поскольку PHP сервер обрывает их через 30 секунд, что делает невозможным применение long polling и Server-Sent Events.

Альтернативным решением стали события на блокировку и разблокировку формы, отправляемые на сервер при входе и выходе пользователя. Однако эта стратегия также столкнулась с трудностями при обработке закрытия окна браузера, поскольку событие onbeforeunload не срабатывало при запросе о сохранении изменений. После замены onbeforeunload на unload, возникла проблема с браузером Edge, где событие перестало срабатывать.

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


Новое на сайте

20873Как Chrome и Safari мешают мошенникам красть данные? 20872Может ли один запрос взломать сервер на PHP? 20871Что скрывает критическая уязвимость GitLab с оценкой CVSS 10,0? 20870Как LiteLLM 1.107.0 превратили в ловушку для учётных данных? 20869Когда ИИ-агенты отключают контроль 20868Уязвимости Plex открыли путь майнерам и Linux-бэкдору 20867Взлом OpenCode Console: под угрозой могли оказаться ключи OpenAI, Anthropic и Google 20866Rank Math PRO: заражённое обновление оставило на сайтах самовосстанавливающийся бэкдор 20865Как исследовательские модели OpenAI обходили ограничения и присваивали чужие данные 20864Атака на BeyondTrust: шпионская группа получила доступ к серверам поддержки 20863Как пакет imgdecode превращает npm-зависимость в загрузчик вредоносного кода? 20862Как PEERSTITCH обходит проверки VPN-сессий FortiOS? 20861Что происходит, когда ИИ-агент выходит за пределы тестовой среды? 20860Как 37-летняя ошибка открыла путь к root в OpenBSD 7.9? 20859ИИ-модели для SOC: точный ответ зависит от улик
Ссылка