【问题标题】:Should I need to specify a timeout when using Apache's HttpClient?使用 Apache 的 HttpClient 时是否需要指定超时?
【发布时间】:2012-08-13 11:10:58
【问题描述】:

默认值是无限的。

但是由于我在Android中使用Apache Client [1],由于移动网络总是不可靠的,所以我需要设置http.socket.timeouthttp.connection.timeout吗?

如果是,我应该设置什么值? 一分钟是否适合移动网络(例如 3G)?

[1]http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html

【问题讨论】:

    标签: java android httpclient apache-httpclient-4.x apache-commons-httpclient


    【解决方案1】:

    如果您不能使用AndroidHttpClient,您始终可以设置相同的超时值,即:

    // Default connection and socket timeout of 60 seconds.  Tweak to taste.
    private static final int SOCKET_OPERATION_TIMEOUT = 60 * 1000;
    

    这个常量用于很多超时,

    HttpConnectionParams.setConnectionTimeout(params, SOCKET_OPERATION_TIMEOUT);
    HttpConnectionParams.setSoTimeout(params, SOCKET_OPERATION_TIMEOUT);
    

    并且在调用SSLCertificateSocketFactory.getHttpSocketFactory(..)时也使用

    【讨论】:

    • 你是怎么想出 60 秒的?有什么标准做法吗?
    • 60s 是 Google 在 SDK (android.net.http.AndroidHttpClient) 中提供的 HttpClient 实现中使用的 - 它添加了一些花絮 - 例如配置套接字和连接超时,但选择背后的动机超时几乎不存在。 “调整口味”,但至少 60 年代是 AndroidHttpClient 的默认行为。
    猜你喜欢
    • 2011-10-09
    • 2023-01-07
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 2014-10-29
    • 1970-01-01
    • 2011-01-23
    • 2018-12-30
    相关资源
    最近更新 更多