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

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

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

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

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


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

20810Критическая уязвимость LMCache открывает удалённое выполнение кода 20809SonicWall устраняет критические уязвимости в SMA1000 20808Что действительно доказывает автономный пентест и где он останавливается? 20807Киберриск переместился внутрь рабочего процесса 20806Как китайская хакерская сеть превратила украденную почту в доступный другим сервис? 20805ARTEX и SCARLET LOOP: как ИИ превратился в инструмент кражи данных 20804Как Linux-бэкдоры маскируются под почтовую защиту в южной Корее и на Тайване? 20803Сможет ли Anthropic открыть опасные возможности ИИ для защиты сетей? 20802Японию накрыла волна утечек через API и Metabase 20801Как захват .gh, .sl и .as позволил выпускать сертификаты для Google? 20800Как MonsterCloud могла заработать на выкупе у киберпреступников? 20799Почему CVE-2026-21589 начали эксплуатировать через два часа после раскрытия? 20798Подделка админ-сессий в Rejetto HFS 20797Почему CVE-2026-88779 отключает SAML-сервисы NetScaler? 20796Почему Apple ограничит полный доступ ИИ-агентов к диску?
Ссылка