У меня возникла проблема с получением Socket.io сообщений непосредственно перед переходом по странице - обычно, когда сообщение является прямым результатом какого-либо действия на стороне сервера, вызванного навигацией.
То, что я сейчас вижу, выглядит так:
- Socket.io подключается
- Пользователь инициирует навигацию по странице (отправляет форму, обновляет и т. д.)
- Логика на стороне сервера отправляет запрос на сервер socket.io, который немедленно отправляет событие все еще подключенному клиенту.
- Клиент получает и подтверждает запрос (я почти уверен, что есть какое-то подтверждение сообщений, встроенных в socket.io, поправьте меня, если я ошибаюсь), и отобразит уведомление пользователю, но затем...
- Соединение socket.io закрывается на исходной странице
- Новая страница загружается и отображается
- Socket.io открывает новое соединение, но новых сообщений нет, потому что последнее было получено и подтверждено.
На самом деле это не ошибка, поскольку я не думаю, что разумно ожидать, что Socket.io закроет соединение до того, как произойдет навигация. Тем не менее, я не совсем уверен, как лучше всего справиться с этим. В настоящее время я держу одно соединение открытым для каждого клиента за раз и закрываю другое, когда подключается новый. Однако в данном случае этого не происходит, поскольку первый закрылся до того, как подключился второй. Я также мог бы вести список всех клиентов, но это тоже не решило бы эту проблему, потому что сообщение все равно было бы получено при первом подключении.
Может ли кто-нибудь предложить решение этой проблемы, которое гарантирует, что пользователь всегда будет видеть уведомление о сообщении?