iOS некорректно срабатывает событие onClose WebSocket

Имеется WebSocket Server (javax.websoketapi) Java EE on Tomcat 9.

Есть два клиента: iOS и Android.

Как обстоит дело на Android (Chrome):

Клиент подключается к сокету, срабатывает событие onOpen, на сообщения onMessage. При закрытии вкладки корректно срабатывает сообщение onClose.

Как обстоит дело на iOS (Chrome):

Клиент подключается к сокету, срабатывает событие onOpen, на сообщения onMessage. И вот тут начинается веселье. Если я закрою вкладку браузера, то события onClose не будет (хотя по логике вещей должно быть). Далее. Я создаю новую вкладку в браузере. Ввожу первый символ url адреса и я тут же наблюдаю onClose который вытекает в onError ибо что-то уже null. Ну и “переподключение” к сокету.

Сервер тут по сути не причем ибо проблема наблюдается именно на телефоне apple.

Вопрос. как сиё чудо Apple починить?

В приложении, над которым я работал, был механизм пингов. Если ping-pong не проходит в течение 30 сек между клиентом-сервером, то сервер закрывал соединение. Этот механизм срабатывал в вышеописанной ситуации.

но это ж сообщение инициирует сервер. как тогда это сделать самостоятельно? вешать таймер? или как.

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

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