APACHE HTTPCLIENT 4.3-设置连接空闲超时



在Apache HttpClient 4.3版本上配置连接超时的最短方法是什么?

我看过文档,找不到任何东西。我的目标是将开放连接减少到最低邮政服务器。

例如,在Jetty Client 8.x中,您可以设置httpclient.setidletimeout:http://download.eclipse.org/jetty/stable-8/stable-8/apidocs/org/eclipse/eclipse/jetty/jetty/client/client/htttpclient.httml#setidletletletimetimetimetimetimet(长)

在RequestConfig中设置了超时,因此您可以在调用HTTPClientBuilder时设置默认值。

例如,假设您的超时变量以秒为单位创建您的自定义requestConfig您可以做这样的事情:

RequestConfig config = RequestConfig.custom()
    .setSocketTimeout(timeout * 1000)
    .setConnectTimeout(timeout * 1000)
    .build();

您可以构建您的httpclient设置默认requestConfig这样:

HttpClients.custom()
    .setDefaultRequestConfig(config);

you 不能在apache http client的配置中设置一个空闲连接超时。原因是这样做有一个性能开销。

文档清楚地说明了原因,并给出了您可以复制的空闲连接监视器实现的示例。本质上,这是您在HttpClientConnectionManager上定期调用closeIdleConnections的另一个线程

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

经典阻塞I/O模型的主要缺点之一是,只有在I/O操作中阻止时,网络插座才能对I/O事件做出反应。当连接回到经理时,它可以保持活跃,但是它无法监视套接字的状态并对任何I/O事件做出反应。如果连接在服务器端关闭,客户端连接将无法检测连接状态的更改(并通过关闭插座末端的插座做出适当反应)。 httpclient试图通过测试连接是否为"陈旧"来减轻问题,这是不再有效的,因为它在服务器端关闭,然后使用连接执行HTTP请求。过时的连接检查不是100%可靠的,并在每个请求执行中增加了10至30毫秒的开销。唯一不涉及每个插座模型的无需一个线程的可行解决方案是一个专用的监视器线程,用于驱逐由于长期不活动而被视为过期的连接。监视线程可以定期调用ClientConnectionManager#CLOSSEDEXPIERDCONNECTIONS()方法以关闭所有过期的连接并驱逐池中的封闭连接。它还可以选择调用clientConnectionManager#CloseIdLeconNections()方法以关闭在给定时间段内闲置的所有连接。

最新更新