我在Android应用程序中使用Apache DefaultHttpClient向Web服务器发出get请求(URL无关紧要,这种现象可见于不同的服务器/网站)。使用HTC Desire和3G网络的第一个请求需要几秒钟(> 4秒),后续的请求大约只需0.5秒。如果我在发出下一个请求之前等待超过15秒,则下一个请求再次需要几秒钟。 请求是使用HTTP1.1,服务器时间不是问题。 DNS查找也不是问题,因为我也尝试使用IP。
对我来说,它似乎是Apache框架中的某些连接超时设置或我的HTC设备使网络接口进入休眠状态(如果它完全执行此操作)。
编码很简单,看起来像这样:
HttpGet get = new HttpGet(uri);
long startTimeMillisRequest = System.currentTimeMillis();
HttpResponse response = client.execute(get);
long endTimeMillisRequest = System.currentTimeMillis();
有没有人知道原因或经历同样的事情? 我已经将它放入AsyncTask中,但我仍然想知道为什么这么慢。
谢谢, 马丁
答案 0 :(得分:2)
这里有几个选项:
Keepalive:设置初始TCP连接然后重新使用tcp连接后续的http请求可能会很昂贵。这解释了在大约10-15秒后丢弃tcp连接,迫使你重新启动它们
DNS缓存到期 - 因为我们谈论的是秒而不是几分钟,因此非常不可能。
最好的办法是设置tcpdump并捕获数据包。您可以通过捕获服务器上的入站数据包并查看tcp流来完成此操作。