Как быстро закрыть не отвечающий веб-сокет в 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 быстро обнаруживает, что клиент отключен или не отвечает на закрытие веб-сокета?

Ответы на вопрос(3)

Ваш ответ на вопрос