Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java WebSocket会话在一段时间未接收输入后关闭_Java_Java Websocket - Fatal编程技术网

Java WebSocket会话在一段时间未接收输入后关闭

Java WebSocket会话在一段时间未接收输入后关闭,java,java-websocket,Java,Java Websocket,所以我有一个Websocket会话,它从服务器读取信息。但是,如果我完全切断它正在接收的信息,大约一分钟后,它将停止接收新信息,并且不会做任何事情,即使服务器的输出重新打开 我认为WebSocketContainer方法 setDefaultMaxSessionIdleTimeout(Long time) 将解决我的问题,因此我将其设置为 container.setDefaultMaxSessionIdleTimeout(86400000L); 我认为这将意味着它将继续运行长达一天的不活动

所以我有一个Websocket会话,它从服务器读取信息。但是,如果我完全切断它正在接收的信息,大约一分钟后,它将停止接收新信息,并且不会做任何事情,即使服务器的输出重新打开

我认为WebSocketContainer方法

setDefaultMaxSessionIdleTimeout(Long time)
将解决我的问题,因此我将其设置为

container.setDefaultMaxSessionIdleTimeout(86400000L);
我认为这将意味着它将继续运行长达一天的不活动

然而,情况并非如此,它在不活动一分钟后就会停止。下面是我正在使用的代码,也许有人可以让我知道我做错了什么:

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);
    }
}
我是WebSocket的新手,所以我可能完全误解了一些事情,但我希望有人能给我指出正确的方向。提前谢谢

您能试一下
会话吗

根据
setDefaultMaxSessionIdleTimeout
文档:

可以使用session.setMaxIdleTimeout(long)在每个会话的基础上重写该值


2个想法,第一个是从不同的环境中检查,以排除较低级别的网络问题。第二个是:使用另一台服务器进行测试,以排除服务器端问题,其中一个没有api令牌。我已经尝试过了,我甚至打印了会话的maxIdleTimeout,以查看它是否在某个点被覆盖,而不是。