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 TomcatComo um servidor Spring FrameworkTomcat detecta rapidamente que um cliente foi desconectado ou não está respondendo para fechar o soquete da web?