2015-06-29 1 views
6

Итак, у меня есть сеанс Websocket, который считывает информацию с сервера. Однако, если я отключу информацию, которую он получает полностью, примерно через минуту он перестанет получать новую информацию и ничего не сделает, даже если снова будет возвращен вывод с сервера.Сессия WebSocket закрывается после не получения ввода в течение некоторого времени

Я думал, что метод WebSocketContainer

setDefaultMaxSessionIdleTimeout(Long time) 

бы исправить мою проблему, поэтому я его

container.setDefaultMaxSessionIdleTimeout(86400000L); 

который я думал, что означает, что она будет продолжать работать до 1 дня бездействия.

Однако это не так, оно прекращается через минуту бездействия. Ниже приведен код, я использую, может быть, кто-то может позволить мне знать, что я делаю неправильно:

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

Я довольно новыми для WebSockets, чтобы я мог быть полностью недоразумение что-то, но я надеюсь, что кто-то будет в состоянии указать мне в правильном направлении. Заранее спасибо!

+0

2 идеи, первые один проверить его из другой среды в исключить сетевые проблемы более низкого уровня. – Remco

+0

Второй: протестируйте другой сервер, чтобы исключить проблемы с сервером, один без токена api. – Remco

ответ

0

Можете ли вы попробовать setMaxIdleTimeout(0) на session?

Согласно setDefaultMaxSessionIdleTimeout документов:

Значение может быть изменено на каждую сессию основе с использованием Session.setMaxIdleTimeout (длинный)

+0

Я уже пробовал это, я даже распечатывал maxIdleTimeout сеанса, чтобы увидеть, было ли оно переопределено в какой-то момент, и это не так. – shadowarcher