Как быстро закрыть не отвечающий веб-сокет в Java Spring Tomcat?
У меня есть приложение реального времени с клиентами, использующими веб-сокеты для соединения с сервером Spring Framework, на котором запущен Spring Boot Tomcat. Я хочу, чтобы сервер быстро (в течение 5 секунд) обнаружил, когда клиент перестает отвечать из-за отключения сети или другой проблемы, и закрыл веб-сокет.
я пытался
Установка максимального времени простоя сеанса, как описано в документации как «Настройка WebSocket Engine»http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html
@Bean
public WebSocketHandler clientHandler() {
return new PerConnectionWebSocketHandler(ClientHandler.class);
}
@Bean
public ServletServerContainerFactoryBean createWebSocketContainer() {
ServletServerContainerFactoryBean container =
new ServletServerContainerFactoryBean();
container.setMaxSessionIdleTimeout(5000);
container.setAsyncSendTimeout(5000);
return container;
}
Я не уверен, что это реализовано правильно, потому что я не вижу связи между ServletServerContainerFactoryBean и моим поколением ClientHandlers.
Отправка сообщений ping с сервера каждые 2,5 секунды. После того, как я вручную отключил клиента, разорвав сетевое соединение, сервер успешно отправляет эхо-запросы еще на 30 с лишним секунд, пока не появится ошибка транспорта.
1 и 2 одновременно
1 и 2 и настройкаserver.session-timeout = 5
в приложении. свойства
Моя методология для тестирования это:
Подключите веб-сокет от клиента ноутбука к серверу TomcatОтключите сетевое соединение на ноутбуке с помощью физического переключателяОжидание событий сервера TomcatКак сервер Spring FrameworkTomcat быстро обнаруживает, что клиент отключен или не отвечает на закрытие веб-сокета?