【问题标题】:DefaultHttpClient timeout values and retries on androidDefaultHttpClient 超时值和 android 上的重试
【发布时间】:2011-12-31 08:35:40
【问题描述】:

我遇到了一个问题,即我们的 android 应用程序的 HTTP 请求经常超时,我需要为超时限制和重试次数找到一个合理的水平。

当前使用 apache DefaultHttpClient 实现的解决方案(不是我的实现)正在执行 3 次手动重试,超时时间增加,如下所示:

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 请求的最佳实践?

【问题讨论】:

    标签: android apache timeout httpclient connection-timeout


    【解决方案1】:

    我认为没有任何理由这样做,而不仅仅是从一开始就使用最大的超时时间。不过,也许其他人可以。

    可能有点离题,但我想提请您注意this article,它建议迁移到HttpURLConnection,因为它是并且将来会得到更好的支持。通读它,了解HttpURLConnection 相对于 Apache 库的优缺点,并决定是否值得切换。

    【讨论】:

      【解决方案2】:

      如果网络非常慢,可能需要很长时间才能连接。另一方面,即使在更快的网络上,连接也可能会失败。

      因此,在快速网络中连接有点“丢失”的情况下,让第一次尝试以更短的超时时间更快重试是有意义的。但我想不出超时持续增加的原因。

      由于网络数量如此之多,因此几乎不可能收集有关典型连接和超时时间的良好数据。我假设您看到的数字不是凭经验选择的。

      【讨论】:

      • 你会说第一次尝试时连接和套接字超时都会降低吗?
      • @pka 我想这取决于您是否预计网络上的数据包丢失或 httpd 超时的可能性更大。我认为没有一个正确的答案。
      猜你喜欢
      • 2013-09-08
      • 2011-11-05
      • 2013-04-11
      • 2012-03-02
      • 2015-01-26
      • 2013-10-10
      • 2012-03-09
      • 2013-08-15
      • 1970-01-01
      相关资源
      最近更新 更多