Ssylka

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

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

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

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

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


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

15389Подземное таяние под фундаментом северной Америки 15388NASA показала астероид Doughaldjohanson с формой булавы 15387Запрет восьми искусственных красителей в продуктах США: план Роберта Кеннеди-младшего 15386Как зловредный Docker-модуль использует Teneo Web3 для добычи криптовалюты через... 15385Влияние плана 529 на размер финансовой помощи в вузах 15384Первое свидетельство социального потребления алкоголя среди шимпанзе 15383Возвращение беверли Найт на родную сцену Веллингтона 15382«Череп» Марса: неожиданная находка ровера Perseverance в кратере Джезеро 15381Внутренние угрозы безопасности: браузеры как слабое звено в корпоративной защите 15380Тайна столкновения в скоплении персея раскрыта 15379Уязвимость ConfusedComposer в GCP Cloud Composer открывает путь к эскалации привилегий 15378Как когнитивные тесты помогают воспитать послушного щенка 15377Почему астероид Дональджонсон удивляет геологов всей сложностью? 15376Почему забыть отравление едой невозможно? 15375Стальная гнездовая коробка на мосту: надежная защита для орланов и автомобилистов