2015-06-29 10 views
6

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!

+0

2 idee, prima controllare da un ambiente diverso per escludere problemi di rete di livello inferiore. – Remco

+0

Secondo: test con un altro server per escludere problemi lato server, uno senza il token API. – Remco

risposta

0

Puoi provare setMaxIdleTimeout(0) su session?

Secondo i documenti setDefaultMaxSessionIdleTimeout:

Il valore può essere sovrascritto su una base per sessione utilizzando Session.setMaxIdleTimeout (lungo)

+0

Ho già provato questo, ho anche stampato il maxIdleTimeout della sessione per vedere se è stato sostituito in qualche punto, e non lo era. – shadowarcher

Problemi correlati