Как узнать, поддерживает ли соединение веб-узлы?

У меня есть webapp, который работает в браузере. Этот webapp подключен к серверу, который использует веб-узлы. Таким образом, связь между сервером и моим клиентом/браузером основана на websockets. Если на сервере происходит какое-то волшебное событие, некоторые веб-службы отправляют новый XML/JSON в мой webapp и отображаются новые данные.

Но как я, как клиент/браузер, знаю, жив ли соединение? Допустим, я не получаю новый XML около 30 секунд. Как я могу узнать, закрыто ли соединение/сломано/сервер в автономном режиме или все в порядке, но на самом сервере не произошло никакого нового волшебного события.

Ответ 1

3 способа:

  • полагайтесь на TCP, чтобы обнаружить потерю связи, которая в конечном итоге появится в событии JS onclose
  • отправлять сообщения WebSocket с сервера. Браузеры будут отвечать WS-понгами, возможно, более надежная обнаружена потеря подключения, также на стороне клиента.
  • отправлять биты уровня приложения с сервера на сервер, сервер должен иметь логику для ответа. вы не можете запускать WS pings из браузеров (в JS)

Ответ 2

Объект соединения с веб-узлом имеет поле readyState, в котором будет указано, является ли соединение еще активным (из документации по стрелке). Для ReadyState может быть

0 - connection not yet established
1 - conncetion established
2 - in closing handshake
3 - connection closed or could not open

Вы также можете определить обработчик событий для события websocket close, если это то, что вы хотите обработать (попробуйте снова подключиться и т.д.).