I see the code about response close. AbortConnection not releaseConnection ,so
the connection can be re-used.I am confused how the connection be re-used.
public void close() throws IOException {
if (this.connHolder != null) {
this.connHolder.abortConnection();
}
}
At 2015-04-24 03:23:19, "Oleg Kalnichevski" <[email protected]> wrote:
>On Thu, 2015-04-23 at 09:41 +0800, [email protected] wrote:
>>
>> Hi,i use PoolingHttpClientConnectionManager with httpclient4.4 .
>> I see the code in MainClientExec.java,but i can't understand .
>>
>>
>>
>>
>> The respone entity is always not null and is stream,so the releaseConnection
>> method cant be invoked always.
>>
>>
>> final HttpEntity entity = response.getEntity();
>> if (entity == null || !entity.isStreaming()) {
>> // connection not needed and (assumed to be) in re-usable state
>> connHolder.releaseConnection();
>> return new HttpResponseProxy(response, null);
>> } else {
>> return new HttpResponseProxy(response, connHolder);
>> }
>>
>>
>> I have see the link
>>
>> http://hc.apache.org/httpcomponents-client-4.3.x/tutorial/html/advanced.html#stateful_conn
>>
>> In my program ,I did not visit https website.
>>
>>
>>
>>
>> My code
>> for (int i=0;i<2;i++){
>> new Thread(new Runnable() {
>> public void run() {
>> SendFile.test("http://tool.chinaz.com/",
>> "start");
>> try {
>> .sleep(1000);
>> } catch (InterruptedException e) {
>> // TODO Auto-generated catch
>> block
>> e.printStackTrace();
>> }
>> }
>> }).start();
>> }
>> public static void test(String url, String functionname) {
>>
>> HttpPost post = new HttpPost(url);
>> CloseableHttpClient client = httpClient;
>> CloseableHttpResponse r = null;
>> try {
>> r = client.execute(post, HttpClientContext.create());
>> HttpEntity entity = r.getEntity();
>> entity.getContent();
>> } catch (ClientProtocolException e) {
>> e.printStackTrace();
>> } catch (IOException e) {
>> e.printStackTrace();
>> } finally {
>> }
>> }
>>
>>
>> private static PoolingHttpClientConnectionManager cm = new
>> PoolingHttpClientConnectionManager();
>> private static CloseableHttpClient httpClient;
>> static {
>> cm.setMaxTotal(200);
>> cm.setDefaultMaxPerRoute(2);
>> RequestConfig defaultRequestConfig = RequestConfig.custom()
>> .setSocketTimeout(10000).setConnectTimeout(10000)
>> .setConnectionRequestTimeout(50000).build();
>>
>> httpClient = HttpClients.custom()
>> .setDefaultRequestConfig(defaultRequestConfig)
>> .setConnectionManager(cm).build();
>> }
>>
>>
>>
>>
>> The log output is here .
>> - http-outgoing-1 << HTTP/1.1 200 OK
>> - http-outgoing-1 << Cache-Control: public
>> - http-outgoing-1 << Content-Type: text/html; charset=utf-8
>> - http-outgoing-1 << Content-Encoding: gzip
>> - http-outgoing-1 << Expires: Fri, 17 Apr 2015 03:50:27 GMT
>> - http-outgoing-1 << Server: Microsoft-IIS/7.5
>> - http-outgoing-1 << X-AspNet-Version: 4.0.30319
>> - http-outgoing-1 << Date: Fri, 17 Apr 2015 03:20:27 GMT
>> - http-outgoing-1 << Content-Length: 8507
>> - Connection can be kept alive indefinitely
>>
>>
>>
>>
>> Any help in this issue would be much appreciated.
>> Thanks
>> mrhuang
>>
>
>I am not quite sure I understand the issue. You should not even be using
>#releaseConnection in the first place. It is provided for compatibility
>with HC 3.x. You should always close CloseableHttpResponse in a
>try-finally or try-with-resources.
>
>Oleg
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: [email protected]
>For additional commands, e-mail: [email protected]
>