Переподключение веб-сокета после перезагрузки браузера - PullRequest
1 голос
/ 29 марта 2019

Я создаю приложение реагирования, которое содержит множество компонентов, которые имитируют реальные элементы управления, такие как переключатели, регуляторы температуры, датчики, датчики и т. Д., И сильно зависит от состояния

Изначально при подключении к серверу создается список элементов управления json, который анализируется, отображается и отображается приложением. Нежелательные перезагрузки этого файла управляются путем проверки даты его версии, которая хранится в локальном хранилище.

После загрузки выполняется вызов для загрузки начальных состояний ВСЕХ элементов управления, получение, построение и визуализация которых может занять несколько секунд. Впоследствии, но в рамках одной и той же команды, принимаются и обрабатываются только измененные состояния

Теперь вот суть дела. Все работает отлично до момента, когда приложение обновляется. Я понимаю, что при обновлении браузера любой открытый веб-сокет закрывается и повторно подключается (используя тот же код), однако при повторном подключении из-за того, что у меня новое соединение с сервером, я не могу получать только обновленные состояния, но вынужден снова загрузите и проанализируйте все состояния управления,

Я пытался изучить использование логики, чтобы проверить, открыт ли сокет перед отправкой начальной команды, но насколько я понимаю, как работает веб-сокет, это не сработает,

Можно ли каким-либо образом сохранить Id веб-сокета в виде файла cookie (о котором я ничего не знаю) или в локальном хранилище для повторного подключения того же соединения сокета после перезагрузки, что позволяет получать только новые изменения состояния.

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

1 Ответ

1 голос
/ 30 марта 2019

Как вы знаете, браузеры отключают соединения веб-сокетов, закрываются при выгрузке страницы. И после перезагрузки все состояния, сохраненные в DOM, исчезли.

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

Возможно, вы сможете использовать локальное хранилище или хранилище сеансов для хранения состояния вашего приложения (а не только отметки времени последнего поиска). Затем, после перезагрузки, ваше приложение может получить состояние из этого хранилища, вместо того, чтобы переполнять его с нуля с вашего сервера через канал веб-сокета.

Вы можете попробовать прослушать событие 'unload' в окне document.defaultView вашего приложения и заставить обработчик событий сохранять ваш статус в локальном хранилище или в хранилище сеанса до выгрузки страницы.

Очевидно, что при этом вы кешируете состояние своего приложения в браузере. Таким образом, вы беретесь за проблемы согласованности кэша, времени жизни, устаревших данных и всего такого.

У 'toobz есть много примеров использования React / Redux с локальным хранилищем / сессией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...