2

PoolingClientConnectionManagerBasicResponseHandler과 함께 DefaultHttpClient 아파치를 사용하고 있습니다. 이들은 서로 다른 스레드간에 공유되며 각 스레드는 고유 한 HttpRequestBase 확장을 생성합니다.PoolingClientConnectionManager를 사용할 때 연결을 해제 하시겠습니까?

BasicResponseHandlers를 사용할 때 연결을 사용하여 관리자에게 수동으로 알려야합니까? 마지막으로 연결 랩에 넣을 필요가 없으므로 연결 유출이 발생하지 않습니까?

, 나는이

HttpGet get = new HttpGet(address); 
try { 
    httpclient.execute(get, new BasicResponseHandler()); 
} finally { 
    get.reset(); 
} 

을 할 필요가 또는이 충분히입니다합니까?

HttpGet get = new HttpGet(address); 
httpclient.execute(get, new BasicResponseHandler()); 

나는이 충분하고 좋습니다 Apache documentation.

답변

3

에 명확한 답을하지 않았다.

HttpClient#execute 메소드는 예외 (I/O 또는 런타임)가 발생한 경우 요청과 관련된 모든 자원을 자동으로 해제합니다. ResponseHandler를 사용하여 HTTP 응답을 처리하면 기본 연결이 자동으로 연결 관리자에게 다시 릴리스됩니다.

+0

이것은 내 가정 이었지만 더 나은 설명이나 권위있는 소스에 대한 링크를보고 싶습니다. – Eyal

+0

@Eyal http://hc.apache.org/httpcomponents-client-ga/examples.html의 'Response handling'에 대한 의견을 참조하십시오. – oleg

+0

@oleg 그러나이 예는 단일 스레드이며, 그 예는 (finally 절은 연결의 해제가 보장됩니다. 나는 ConnectionHandler의 작업 중에 연결 관리자가 연결이 여전히 사용 중이라고 생각하게하는 예외가 있다고 걱정한다. – Eyal

관련 문제