¿Cómo se cierra rápidamente un websocket que no responde en Java Spring Tomcat?

Tengo una aplicación en tiempo real con clientes que usan websockets para conectarse con un servidor Spring Framework, que ejecuta Spring Boot Tomcat. Quiero que el servidor detecte rápidamente (en 5 segundos) cuándo un cliente deja de responder debido a una desconexión de la red u otro problema y cierra el websocket.

Yo he tratado

Establecer el tiempo máximo de inactividad de la sesión como se describe en la documentación como "Configuración del motor WebSocket"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;
}

No estoy seguro de que esto se implemente correctamente porque no veo el enlace entre ServletServerContainerFactoryBean y mi generación de ClientHandlers.

Envío de mensajes de ping desde el servidor cada 2.5 segundos. Después de desconectar manualmente el cliente rompiendo la conexión de red, el servidor felizmente envía pings por más de 30 segundos hasta que aparece un error de transporte.

1 y 2 simultáneamente

1 y 2 y configuraciónserver.session-timeout = 5 en application.properties

Mi metodología para probar esto es:

Conecte un websocket desde un cliente portátil al servidor TomcatApague la conexión de red en la computadora portátil usando el interruptor físicoEspere los eventos del servidor Tomcat

¿Cómo detecta rápidamente un servidor Spring FrameworkTomcat que un cliente se ha desconectado o no responde para cerrar el websocket?

Respuestas a la pregunta(3)

Su respuesta a la pregunta