Quindi ho una sessione Websocket che legge le informazioni da un server. Tuttavia, se togli le informazioni che sta ricevendo completamente, dopo circa un minuto smetterà di ricevere nuove informazioni e non farà nulla, anche quando l'uscita dal server viene riattivata.WebSocket Session si chiude dopo non aver ricevuto input per un po 'di tempo
ho pensato che il metodo WebSocketContainer
setDefaultMaxSessionIdleTimeout(Long time)
sarebbe risolvere il mio problema, quindi ho impostato a
container.setDefaultMaxSessionIdleTimeout(86400000L);
che ho pensato che sarebbe significa che continuerà a funzionare fino a 1 giorno di inattività.
Tuttavia questo non è il caso, si ferma dopo solo un minuto di inattività. Di seguito è riportato il codice che sto usando, forse qualcuno può farmi sapere cosa sto facendo male:
public void run(String... args) throws Exception {
log.info("Starting...");
log.info("-- API URL: {}", apiUrl);
log.info("-- API Token: {}", apiToken);
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
container.setDefaultMaxSessionIdleTimeout(86400000L);
ClientEndpointConfig config = ClientEndpointConfig
.Builder.create()
.configurator(new CustomConfigurator(apiToken))
.build();
try {
session = container.connectToServer(ConsumerClient.class, config, URI.create(apiUrl));
} catch (DeploymentException de) {
log.error("Failed to connect - DeploymentException:", de);
} catch (IOException ioe) {
log.error("IOException:", ioe);
}
if (this.session == null) {
throw new RuntimeException("Unable to connect to endpoint.");
}
log.info("Max Idle Timeout: " + session.getMaxIdleTimeout());
log.info("Connected.");
log.info("Type \"exit\" to cancel.");
log.info("...Waiting for data...");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input;
try {
do {
input = br.readLine();
if (!input.equals("exit")) {
this.session.getBasicRemote().sendText(input);
}
} while (!input.equals("exit"));
} catch (IOException e) {
log.error("IOException:", e);
}
}
Sono abbastanza nuovo per WebSockets così che io possa essere completamente malinteso qualcosa, ma spero che qualcuno sarà in grado di indicarmi la giusta direzione. Grazie in anticipo!
2 idee, prima controllare da un ambiente diverso per escludere problemi di rete di livello inferiore. – Remco
Secondo: test con un altro server per escludere problemi lato server, uno senza il token API. – Remco