使用“keepalive”连接从宁静的Web服务轮询数据

时间:2012-10-18 13:37:32

标签: java android http rest

我正在开发一个从安静的Web服务中获取数据的Android应用程序。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

同样,我从未尝试过这种方式,所以我不知道。此外,我不确定这是否打破了RESTful服务的一些未说明的法律。我从未读过与此方法相矛盾的任何内容。