Java 从RESTfulWebService轮询数据时使用;“保持活力”;连接

Java 从RESTfulWebService轮询数据时使用;“保持活力”;连接,java,android,http,rest,Java,Android,Http,Rest,我正在开发一个android应用程序,它从restful web服务获取数据 我在考虑实现这一点的最佳方法,我的代码正在运行,但我相信它可以优化。 以下是我当前的代码状态: 我正在使用调度程序从服务调用restResource。 坏的部分是在每次请求时打开和关闭连接。 (rest资源保留实时数据(我必须每秒提取一次),当数据为空时,返回一个空数组) 如何使用随响应返回的keepalive头?在使用长轮询之前,我已经这样做了,在长轮询中,我的RESTful调用会一直阻塞,直到超时或有响应为止。无论

我正在开发一个android应用程序,它从restful web服务获取数据

我在考虑实现这一点的最佳方法,我的代码正在运行,但我相信它可以优化。 以下是我当前的代码状态: 我正在使用调度程序从服务调用restResource。 坏的部分是在每次请求时打开和关闭连接。 (rest资源保留实时数据(我必须每秒提取一次),当数据为空时,返回一个空数组)


如何使用随响应返回的keepalive头?

在使用长轮询之前,我已经这样做了,在长轮询中,我的RESTful调用会一直阻塞,直到超时或有响应为止。无论哪种方式,调用客户端都会在响应(超时或有效)时再次调用RESTful服务

我不知道如何使用keepalive标头,但似乎您要做的是发送它,然后简单地保持连接打开。在服务器端java代码中,您将获得响应的输出缓冲区并开始向下发送内容。在客户端,获取输入缓冲区(不确定这在Android中是如何发生的,但我对它的Java代码印象深刻,所以有很多方法可以做到这一点)并开始阅读。在某种程度上,我认为你需要强制关闭连接,仅仅因为你不想让它无限期地打开


再说一次,我从来没有这样尝试过,所以我不知道。此外,我不确定这是否违反了一些关于宁静服务的潜规则。我从来没有读过任何与这种方法相矛盾的东西。

谢谢@CodeChimp,假设我想无限期地保留它,我怎么能一遍又一遍地阅读回复?正如我所记得的,内容在第一次之后就被消费掉了。在java中,保持连接打开并定期多次读取响应的正确方法是什么?我认为您应该获取输出流,而不是关闭它。只要它打开,连接就会打开。请记住,您从HttpServletResponse获得的输出流最终链接到套接字,因此如果您关闭它,就关闭了套接字。这对双方都适用。
        httpResponse = client.execute(request);
        responseCode = httpResponse.getStatusLine().getStatusCode();
        message = httpResponse.getStatusLine().getReasonPhrase();

        HttpEntity entity = httpResponse.getEntity();

        if (entity != null) {

            InputStream instream = entity.getContent();

            response = convertStreamToString(instream);

            instream.close();
        }