我正在使用Apache Common的HTTPClient建立HTTP连接。 连接类型是POST,客户端将从连接读取输出。 但是,无论连接状态如何,我都需要能够随时中断连接。这样做的最佳方式是什么? 是否有内置超时? 问候。
编辑:
只是为了澄清我的问题:
我希望用户能够选择何时切断连接
换句话说,与参数cURL类似的功能:
CURLOPT_TIMEOUT
https://curl.haxx.se/libcurl/c/CURLOPT_TIMEOUT.html
答案 0 :(得分:0)
当您使用HttpClientBuilder实例化httpClient实例时,可以将RequestConfig的实例传递给构建器,该构建器接受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。连接保持活力策略" page
的部分答案 1 :(得分:0)
如果您使用的是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);
更好的方法是使用HttpClientBuilder作为@Bandi Kishore建议。或者使用PoolingClientConnectionManager
直接使用setter接受这些设置。