YaO*_*aOg 16 java apache httpclient
在Apache HttpClient 4.3版本上配置连接空闲超时的最短方法是什么?
我查看了文档,找不到任何东西.我的目标是将开放连接减少到最低服务器峰值.
例如,在Jetty Client 8.x中,您可以设置httpClient.setIdleTimeout:http://download.eclipse.org/jetty/stable-8/apidocs/org/eclipse/jetty/client/HttpClient.html#setIdleTimeout( long )
小智 28
超时在RequestConfig中设置,因此您可以在调用HttpClientBuilder时设置默认值.
例如,假设您的超时变量以秒为单位来创建自定义RequestConfig,您可以执行以下操作:
RequestConfig config = RequestConfig.custom()
.setSocketTimeout(timeout * 1000)
.setConnectTimeout(timeout * 1000)
.build();
Run Code Online (Sandbox Code Playgroud)
然后,您可以构建您的HttpClient设置默认的RequestConfig,如下所示:
HttpClients.custom()
.setDefaultRequestConfig(config);
Run Code Online (Sandbox Code Playgroud)
jas*_*sop 10
您无法在Apache HTTP Client的配置中设置空闲连接超时.原因是这样做会产生性能开销.
文档清楚地说明了原因,并给出了可以复制的空闲连接监视器实现的示例.本质上,这是你运行定期调用另一个线程closeIdleConnections
上HttpClientConnectionManager
http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html
经典阻塞I/O模型的主要缺点之一是网络套接字只有在I/O操作中被阻塞时才能对I/O事件作出反应.当连接释放回管理器时,它可以保持活动状态,但它无法监视套接字的状态并对任何I/O事件做出反应.如果连接在服务器端关闭,则客户端连接无法检测连接状态的变化(并通过关闭其端部的套接字来做出适当的反应).HttpClient尝试通过测试连接是否"陈旧"来缓解此问题,该连接在使用连接执行HTTP请求之前不再有效,因为它在服务器端关闭.过时的连接检查不是100%可靠,并且每次请求执行都会增加10到30 ms的开销.唯一可行的解决方案是,每个套接字模型不涉及空闲连接的一个线程是一个专用的监视器线程,用于驱逐由于长时间不活动而被视为过期的连接.监视器线程可以定期调用ClientConnectionManager#closeExpiredConnections()方法来关闭所有过期的连接并从池中驱逐关闭的连接.它还可以选择调用ClientConnectionManager#closeIdleConnections()方法来关闭在给定时间段内空闲的所有连接.监视器线程可以定期调用ClientConnectionManager#closeExpiredConnections()方法来关闭所有过期的连接并从池中驱逐关闭的连接.它还可以选择调用ClientConnectionManager#closeIdleConnections()方法来关闭在给定时间段内空闲的所有连接.监视器线程可以定期调用ClientConnectionManager#closeExpiredConnections()方法来关闭所有过期的连接并从池中驱逐关闭的连接.它还可以选择调用ClientConnectionManager#closeIdleConnections()方法来关闭在给定时间段内空闲的所有连接.
归档时间: |
|
查看次数: |
24916 次 |
最近记录: |