我面临一个问题,我们的android应用程序的HTTP请求经常超时,我需要找到一个合理的超时限制和重试次数。
当前实现的解决方案(不是我的实现)使用apache DefaultHttpClient做三次手动重试增加超时如下所示:
private static final int[] CONNECTION_TIMEOUTS = new int[] {4000, 5000, 10000};
private static final int[] SOCKET_TIMEOUTS = new int[] {5000, 8000, 15000};
我很难理解为什么当前的实现正在使用越来越多的超时,这是试图解决什么。当手机连接到3G网络时,大部分时间都在使用这款应用。有没有人解释为什么每次重试时增加超时时间会更好,或者有人有3G网络上HTTP请求处理的最佳实践?
我不认为有任何理由这样做,而不是从一开始就使用最大的超时。也许别人可以。
可能有点跑题,但我想提请您注意这篇文章,它建议迁移到HttpURLConnection
,因为它现在和将来会得到更好的支持。阅读全文,了解HttpURLConnection
相对于Apache库的优缺点,并决定是否值得转换。
对于非常慢的网络,可能需要很长时间才能连接。另一方面,即使在更快的网络上,连接也有可能失败。
因此,在连接在快速网络中有点"丢失"的情况下,使用较短的超时进行第一次尝试以更快地重试是有意义的。但是我想不出超时时间持续增加的理由。
由于存在如此多的网络,因此几乎不可能收集有关典型连接和超时时间的良好数据。我假设你看到的数字不是经验选择的。