`
suichangkele
  • 浏览: 200087 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

httpClient中的timeout的配置

    博客分类:
  • http
阅读更多

近日在用solrCloud的时候出现了一些状况,在进行查询的时候,由于某些节点的响应速度过慢导致整个请求响应的很慢,我们的解决办法是设置超时时间,也就是如果某些shard的响应太慢,则干脆忽略他的响应。这要涉及到配置httpClient的多个timeout,于是重新学习了一下HttpClient的三个配置,从源码中得到解释,然后做了个例子验证了源码的解释(我使用的httppClient的版本是4.5.2)。

httpClient的三个timeout分别是:connectionRequestTimeout、connectionTimeout、socketTimeout,先看源码中的解释吧:

1、connectionRequestTimeout

 /**
     * Returns the timeout in milliseconds used when requesting a connection
     * from the connection manager. A timeout value of zero is interpreted
     * as an infinite timeout.
     * <p>
     * A timeout value of zero is interpreted as an infinite timeout.
     * A negative value is interpreted as undefined (system default).
     * </p>
     * <p>
     * Default: {@code -1}
     * </p>
     */
    public int getConnectionRequestTimeout() {
        return connectionRequestTimeout;
    }

这个表示从connection manager中获得一个connection的超时时间,也就是从连接池中拿到一个connection的最大时间(连接池的原理我还没有研究),0表示没有任何的限制,如果是-1表示依赖于平台。

 

2、connectionTimeout

 /**
     * Determines the timeout in milliseconds until a connection is established.
     * A timeout value of zero is interpreted as an infinite timeout.
     * <p>
     * A timeout value of zero is interpreted as an infinite timeout.
     * A negative value is interpreted as undefined (system default).
     * </p>
     * <p>
     * Default: {@code -1}
     * </p>
     */
    public int getConnectTimeout() {
        return connectTimeout;
    }

这个表示建立连接的最大时间,这个有点不太懂,前面的connectionRequestTimeout不是已经说过获得connection了吗?为啥这里还说建立连接的时间?

 

3、socketTimeout

    /**
     * Defines the socket timeout ({@code SO_TIMEOUT}) in milliseconds,
     * which is the timeout for waiting for data  or, put differently,
     * a maximum period inactivity between two consecutive data packets).
     * <p>
     * A timeout value of zero is interpreted as an infinite timeout.
     * A negative value is interpreted as undefined (system default).
     * </p>
     * <p>
     * Default: {@code -1}
     * </p>
     */
    public int getSocketTimeout() {
        return socketTimeout;
    }

等待一个数据包的最大时间,这个倒是很简单。 

 

 

 

 

 

 

分享到:
评论

相关推荐

    httpclientjar包

    httpClientParams.setParameter(HttpClientParams.CONNECTION_MANAGER_TIMEOUT, 5000); ``` 对于Web爬虫而言,HttpClient的强大之处在于它的可配置性。通过自定义连接池,可以有效地管理并发请求,防止过多的连接...

    HttpClient工具类封装.docx

    - `CONNECTION_REQUEST_TIMEOUT`:请求超时时间,即从请求发送到接收到响应头的时间,这里是1分钟(60000毫秒)。 - `SOCKET_TIMEOUT`:socket读写超时时间,即从数据开始传输到传输结束的时间,同样是1分钟...

    springboot-keepalive设置测试

    在Spring Boot中,我们可以使用`server.tomcat.connection-timeout`和`server.tomcat.max-http-header-size`等属性来配置Tomcat的HTTP连接参数。`connection-timeout`属性定义了服务器等待客户端发送请求数据的时间...

    commons-httpclient-3.1短信发送包

    httpClient.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 5000); ``` 2. 创建POST请求:短信发送通常采用POST方式,需要设置URL(通常是短信服务商的API接口)和请求参数。例如: ```java PostMethod ...

    dotnet 6 精细控制 HttpClient 网络请求超时.rar

    1. **Timeout 属性**:HttpClient有一个Timeout属性,可以用来设置整个请求过程的超时时间。这是一个整体超时,包括DNS解析、建立TCP连接、发送请求数据以及接收响应数据等所有步骤。如果在指定时间内没有完成这些...

    dotnet 6 使用 HttpClient 的超时机制.rar

    如上所示,可以通过设置`HttpClient`的`Timeout`属性来指定请求超时时间。这是一个`TimeSpan`值,表示在接收到响应或完成请求之前等待的时间。默认值是100秒。 3. **临时覆盖超时**: 在某些情况下,可能需要为单个...

    使用 HttpClient 和 HtmlParser 实现简易爬虫

    getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 5000); getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, ...); int statusCode = httpClient.executeMethod(getMethod); ...

    经典教程httpClient4

    4. **连接管理**:HttpClient的连接管理和连接池配置,如MaxTotal和DefaultMaxPerRoute参数,以及Timeout设置。 5. **身份验证**:处理HTTP的基本认证、摘要认证以及NTLM等复杂认证方式。 6. **HTTPS支持**:配置...

    httpClient网络通信

    可以通过`Timeout`属性设置HttpClient的超时时间,或者在发送请求时传入`CancellationToken`来控制请求取消。 5. **重试机制**: HttpClient本身并不内置重试机制,如果需要重试,需要在应用层实现。例如,可以...

    揭秘JDBC超时机制完整版

    例如,如果socket timeout配置不当,即使设置了statement timeout,也无法处理网络故障导致的超时问题。在某些情况下,JDBC的socket timeout会受到操作系统的默认设置影响,这解释了为何在上述案例中,JDBC连接在...

    httpclient上传文件

    httpClient.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 5000); ``` 3. 构建POST请求:创建一个HttpGet或HttpPost对象,设置URL和请求方法。 ```java PostMethod postMethod = new PostMethod(...

    线上问题分析:The target server failed to respond(目标服务器返回失败) - ado1986

    HttpClient可以配置Keep-Alive timeout,以控制长连接的生命周期。在我们的例子中,HttpClient的Keep-Alive timeout设置为20s。这意味着,如果服务器在20s内没有响应,客户端将关闭连接。 问题分析 现在,我们可以...

    java httpclient设置超时时间和代理的方法

    Java HTTPClient 设置超时时间和代理的方法 Java HTTPClient 是一个功能强大且灵活的 HTTP ...设置超时时间和代理是 Java HTTPClient 中两个非常重要的配置项,通过正确地设置这些项,可以提高系统的稳定性和性能。

    .NET CORE HttpClient的使用方法

    client.Timeout = TimeSpan.FromSeconds(30); }); ``` 重用连接与连接池 HttpClient的一个关键改进是它在内部管理连接池,从而解决了旧版本中的TCP连接耗尽问题。IHttpClientFactory确保HttpClient实例被正确管理...

    C#用POST方式发送数据大小不受限制的方法

    - 在客户端代码中,可以通过设置`HttpClient`的`Timeout`属性来避免超时问题。例如: ```csharp HttpClient client = new HttpClient(); // 不设置超时时间,对于大文件传输来说更为合适 // client.Timeout = ...

    httpclient:Go中的轻量级HTTP客户端

    client.Timeout = timeout ``` ## 六、重试与取消请求 Go的HTTP库不内置重试机制,但你可以实现自己的逻辑。`context`包可以用于取消请求,当不再需要等待响应时: ```go ctx, cancel := context.WithTimeout...

    SpringCloud.03.网关Gateway 配置文件

    connect-timeout: 1s ``` 在这个例子中,还启用了服务发现功能,并设置了HTTP客户端连接超时时间。 7. **与Spring Cloud Service Discovery集成** Gateway可以与Eureka、Consul等服务发现组件集成,自动发现并...

    spring boot封装HttpClient的示例代码

    在上面的代码中,我们定义了一个 HttpClientConfig 类,用于配置 HttpClient 的参数。我们使用 RequestConfig 对象来设置 Socket 超时、连接超时、连接请求超时等参数。然后,我们使用 HttpClients.custom() 方法...

Global site tag (gtag.js) - Google Analytics