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

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

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

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

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


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

20072Эффект красоты решает исход собеседования до первых слов 20069Как черта характера крадёт деньги на переговорах 20068Карточная игра против главной дисфункции команды 20067Какие три нарратива способны провести компанию сквозь любой кризис? 20066Фотосинтез в глазах мышей: возможно ли это без превращения в растение? 20065СПКЯ стало СПМЯ: почему переименование болезни, затрагивающей миллионы женщин, заняло так... 20064Почему великая пирамида Гизы пережила все землетрясения за 4500 лет 20063Генетика Homo erectus: что зубная эмаль рассказала о наших предках 20062Кости в бухте Эребус: что кости моряков Франклина рассказывают спустя полтора века 20061Крупнейший плавучий ветрогенератор в мире: Китай испытывает установку у берегов Шанхая 20060Карие глаза младенца стали индиго после лечения от COVID-19 20058Почему серебряная чаша с Афиной пролежала в немецком лесу две тысячи лет? 20057Дыра в атмосфере солнца: вспышка достигла пика и может зажечь полярное сияние 20056Динго возрастом 950 лет: кто и зачем кормил могилу животного сотни лет?
Ссылка