繁体   English   中英

Apache HTTPClient超时随时

[英]Apache HTTPClient Timeout at any moment

我正在使用Apache Common的HTTPClient建立HTTP连接。 连接类型为POST,客户端将从连接中读取输出。 但是,无论连接状态如何,我都需要能够随时中止连接。 最好的方法是什么? 有内置的超时时间吗? 问候。

编辑:只是为了澄清我的问题:
我希望用户能够选择何时断开连接。
换句话说,与参数cURL相似的功能:CURLOPT_TIMEOUT https://curl.haxx.se/libcurl/c/CURLOPT_TIMEOUT.html

当你使用实例HttpClient的实例HttpClientBuilder ,你可以传递的一个实例RequestConfig的建设者,这inturn接受2个参数。

SocketTimeout定义套接字超时(SO_TIMEOUT),以毫秒为单位,这是等待数据的超时,或者换句话说,是两个连续数据包之间的最大时间段不活动。

ConnectTimeout确定连接建立之前的超时时间(以毫秒为单位)。 超时值为零将被解释为无限超时。

ConnectionRequestTimeout返回从连接管理器请求连接时使用的超时(以毫秒为单位)。 超时值为零将被解释为无限超时。

您正在寻找的是SocketTimeout

RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECTION_TIMEOUT)
                .setConnectionRequestTimeout(CONNECTION_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build();
httpClient = HttpClientBuilder.create().disableAutomaticRetries().setDefaultRequestConfig(requestConfig)
                .setConnectionManager(poolingHttpClientConnectionManager).disableRedirectHandling().build();

您可以看一下ConnectionKeepAliveStrategy 请参阅“2.6连接永葆战略”的部分页面

如果您使用的是DefaultHttpClient ,它将接受HttpParams ,您可以在其中提供与连接相关的设置。

SO_TIMEOUT是SocketTimeout-定义套接字超时(SO_TIMEOUT),以毫秒为单位,这是等待数据的超时,或者换句话说,是两个连续数据包之间的最大时间段不活动。

HttpParams httpParams = new BasicHttpParams();
httpParams.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, CONNECTION_TIMEOUT);
httpParams.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, SOCKET_TIMEOUT);
DefaultHttpClient backend = new DefaultHttpClient(httpParams);

更好的方法是使用@Bandi Kishore建议的HttpClientBuilder。 或者通过使用PoolingClientConnectionManager来直接使用setter接受这些设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM