我在
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中,但我仍然想知道它为什么这么慢.
谢谢,
马丁
最佳答案 这里有几个选项:
> Keepalive:设置初始TCP连接然后重新使用tcp连接后续的http请求可能是昂贵的.这解释了在大约10-15秒后丢弃tcp连接,迫使您重新启动它们
> DNS缓存过期 – 非常不可能,因为我们谈论的是秒而不是几分钟.
最好的办法是设置tcpdump并捕获数据包.您可以通过捕获服务器上的入站数据包并查看tcp流来完成此操作.