2015-06-29 8 views
6

So habe ich eine Websocket-Sitzung, die Informationen von einem Server liest. Wenn ich jedoch die Informationen, die er vollständig empfängt, abschneide, hört er nach ungefähr einer Minute auf, neue Informationen zu empfangen, und tut nichts, selbst wenn die Ausgabe vom Server wieder eingeschaltet wird.WebSocket-Sitzung wird geschlossen, nachdem für einige Zeit keine Eingabe empfangen wurde

Ich dachte, dass die WebSocketContainer Methode

setDefaultMaxSessionIdleTimeout(Long time) 

mein Problem beheben würde, so dass ich setzen Sie ihn auf

container.setDefaultMaxSessionIdleTimeout(86400000L); 

, die ich dachte, dass es bis zu 1 Tag Inaktivität angerannt bedeuten würde, wird sich fortsetzen.

Dies ist jedoch nicht der Fall, es stoppt nach nur einer Minute Inaktivität. Unten ist der Code ich verwende, vielleicht kann mir jemand wissen lassen, was mache ich falsch:

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); 
    } 
} 

Ich bin ziemlich neu in WebSockets so dass ich völlig etwas Missverständnis sein, aber ich hoffe, dass jemand sein wird, kann mich in die richtige Richtung weisen. Danke im Voraus!

+0

2 Ideen, erst man es von einer anderen Umgebung überprüfen Netzwerkprobleme auf niedriger Ebene ausschließen – Remco

+0

Zweiter: Testen Sie mit einem anderen Server, um serverseitige Probleme auszuschließen, einen ohne das API-Token. – Remco

Antwort

0

Können Sie versuchen, setMaxIdleTimeout(0) auf der session?

Nach dem setDefaultMaxSessionIdleTimeout docs:

Der Wert auf einem pro Sitzung außer Kraft gesetzt werden kann, unter Verwendung von Session.setMaxIdleTimeout (lang)

+0

Ich habe das bereits versucht, ich habe sogar das maxIdleTimeout der Session ausgedruckt, um zu sehen, ob es irgendwann überschrieben wurde, und das war es nicht. – shadowarcher