Я строю портал, где студенты могут давать имитационный тест. Для этого мне нужно синхронизировать таймер, запущенный в браузере пользователя, с сервером и сохранить некоторые дополнительные данные теста, сохраненные на сервере во время его выполнения.
Ниже приведены примеры использования:
a. При запуске теста данные теста извлекаются, сохраняются в переменной с socket.io и запускается таймер - работает
b. При действии пользователя событие запускается из внешнего интерфейса и обновляются тестовые данные на socket.io - работает
c. При отключении обновленные данные теста сохраняются обратно в базу данных (в то время как данные также присутствуют в сокете io). Событие запускается с опозданием на несколько секунд при отключении Интернета
d. При повторном подключении последние доступные тестовые данные должны быть доступны в сокете
e. При обновлении страницы последние доступные тестовые данные должны быть отправлены обратно в браузер, и тест должен быть возобновлен
Варианты использования a, b и c работают отлично. Принимая во внимание, что в случае использования d во время переподключения идентификатор сокета изменяется, и данные, сохраненные с socket.io, теряются.
Чтобы исправить это, я добавил код для извлечения данных из базы данных при переподключении. Что хорошо работает в сценариях, когда существует некоторый промежуток времени между отключением и повторным подключением. Но при обновлении страницы событие отключения не запускается сразу, и последние сохраненные данные в базе данных возвращаются клиенту.
Есть ли способ использовать пользовательский идентификатор сокета и сохранять данные постоянными на socket.io, когда происходит отключение и повторное подключение?