Como você fecha rapidamente um soquete da web que não responde no Java Spring Tomcat?

Eu tenho um aplicativo em tempo real com clientes que usam websockets para conectar-se a um servidor Spring Framework, que está executando o Spring Boot Tomcat. Desejo que o servidor detecte rapidamente (em 5 segundos) quando um cliente para de responder devido a uma desconexão da rede ou outro problema e feche o soquete da web.

eu tentei

Configurando o tempo limite máximo de inatividade da sessão, conforme descrito na documentação como "Configurando o 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;
}

Não tenho certeza se isso foi implementado corretamente porque não vejo o link entre o ServletServerContainerFactoryBean e minha geração de ClientHandlers.

Enviando mensagens de ping do servidor a cada 2,5 segundos. Depois de desconectar manualmente o cliente interrompendo a conexão de rede, o servidor envia alegremente pings por mais de 30 segundos até que apareça um erro de transporte.

1 e 2 simultaneamente

1 e 2 e configuraçãoserver.session-timeout = 5 em application.properties

Minha metodologia para testar isso é:

Conecte um websocket de um cliente de laptop ao servidor TomcatDesligue a conexão de rede no laptop usando o comutador físicoAguarde eventos do servidor Tomcat

Como um servidor Spring FrameworkTomcat detecta rapidamente que um cliente foi desconectado ou não está respondendo para fechar o soquete da web?

questionAnswers(3)

yourAnswerToTheQuestion