2017-01-27 6 views
3

У меня есть приложение, в котором клиенты используют веб-соединения для подключения к серверу, на котором запущена Spring Boot Tomcat. Мой вопрос в том, есть ли способ обнаружить клиентское соединение из-за потери сети.Отключение клиента WebSocket из-за потери сети не перехватывается сервером Spring

Спасибо.

ответ

0

Если вы используете топать, проверьте SessionDisconnectEvent. Для сырых соединений WebSocket, вы можете использовать: WebSocketHandler -> afterConnectionClosed

+0

Я не использую топать. Метод afterConnectionClosed из WebSocketHandler не запускается, когда клиент теряет подключение к Интернету. –

+0

Вы проверили -> handleTransportError метод? – melihcoskun

+0

handleTransportError должен быть запущен, но вы должны определить исключение. если это исключение для отключения веб-рассылки, вы можете запустить свое событие. – melihcoskun

0

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

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

Как уже упоминалось, here

ТОПАЙТЕ и Spring также позволяют настроить темы, где каждый абонент будет получать такое же сообщение. Это будет очень полезно для отслеживания активных пользователей. В пользовательском интерфейсе каждый пользователь подписывается на тему , в которой сообщается, какие пользователи активны, и в нашем примере эта тема будет вызывать сообщение каждые 2 секунды. Клиент будет ответить на каждое сообщение, содержащее список пользователей со своим собственным heartbeat, который затем обновляет сообщение, отправляемое другим клиентам. Если клиент не зарегистрировался более 5 секунд (т. Е. Пропустил два пульса), мы рассматриваем их в автономном режиме. Это дает нам около реального времени разрешение пользователей, доступных в чате. Пользователи появятся в поле в левой части экрана, нажав на название, вытащите за окно чата для них, а имена с конвертом рядом с ними имеют новые сообщения.

+0

Есть ли более простой способ реализовать механизм пинг-понга без использования STOMP? –