Ho un'applicazione in tempo reale con client che utilizzano websockets per connettersi con un server Spring Framework, che esegue Spring Boot Tomcat. Voglio che il server rapidamente (entro 5 secondi) rilevi quando un client smette di rispondere a causa di una disconnessione di rete o di altri problemi e chiude il web socket.Come si chiude rapidamente un websocket non responsivo in Java Spring Tomcat?
ho cercato
Impostazione del massimo della sessione timeout di inattività, come descritto nella documentazione come "Configurazione del motore 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; }
io non sono sicuro che questo è implementato correttamente perché non vedo il collegamento tra ServletServerContainerFactoryBean e la mia generazione di ClientHandlers.
Invio di messaggi ping dal server ogni 2,5 secondi. Dopo aver disconnesso manualmente il client interrompendo la connessione di rete, il server invia volentieri ping per altri 30+ secondi fino a quando non viene visualizzato un errore di trasporto.
1 e 2 contemporaneamente
1 e 2 e l'impostazione
server.session-timeout = 5
in application.properties
mia metodologia per testare questo è di:
- Collegare un websocket da una client laptop sul server Tomcat
- Disattivare la connessione di rete sul laptop utilizzando l'interruttore fisico
- Attendere per gli eventi server Tomcat
Come fa un server FrameworkTomcat primavera rilevare rapidamente che un client è stato disconnesso o non risponde per chiudere la websocket?
La mia risposta contiene un esempio di progetto. Non è abbastanza? – Hyperion
È molto utile fornire un progetto di esempio, ma i progetti GitHub svaniscono sempre. Se lo fa, la tua risposta non sarà più utile. Ecco perché ho detto che i post dovrebbero essere autosufficienti. Puoi sempre fornire risorse esterne come riferimento, ma i post di StackOverflow dovrebbero contenere alcuni contenuti. –
È necessario utilizzare STOMP per utilizzare questi eventi? Attualmente sto usando solo una websocket "grezza". – mattm