2009-09-25 6 views
0

java에서 HttpClient를 사용하여 여러 스레드에서 URL의 내용을 가져 오는 올바른 방법은 무엇입니까?HttpClient를 사용하여 다른 스레드의 동일한 URL에 연결

예를 들어 목록으로 항목을로드하고 각 항목을 다른 스레드에 동시에로드하고 같은 URL에서 다른 매개 변수로 정보를 가져 오는 경우. 내가 만드는 오전 응용 프로그램에서

는 다른 스레드에서 동일한 URL에서 XML을 읽을 때 어떤 요소가 예외를 발견 저를 제공합니다 ..

답변

1

난 당신이 HttpClient를를 사용하는 가정 3.0. 시도해보십시오.

HttpClient client = new HttpClient(new MultiThreadedHttpConnectionManager()); 
+0

그래서 각 스레드에서 새 클라이언트를 만드시겠습니까? 또는 여러 스레드에 대해 1 개의 클라이언트를 만드시겠습니까? – Thys

+1

모든 스레드에 대해 하나의 클라이언트. –

0

데이터를 응용 프로그램 범위에 배치하면 모든 스레드에서 사용할 수 있습니다. 데이터가 중요한 경우에는 사용하지 말아야하며, 제거하지 않으면 서버의 수명 기간 동안 존재하는 것처럼 명시 적으로 제거해야합니다.

3

허용 된 대답은 HttpClient 3.x에 대한 해결책을 제시하고 현재 버전은 4.1입니다 (Android에도 포함되어 있음). 4.x 예를 공유하고 싶습니다. 어쩌면 그것은 누군가에게 번잡함을 덜어 줄 수 있습니다.

SchemeRegistry schemeRegistry = new SchemeRegistry(); 
schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); 
schemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443)); 

HttpParams parameters = new BasicHttpParams(); 
ClientConnectionManager connectionManager = new ThreadSafeClientConnManager(parameters, schemeRegistry); 
HttpClient httpClient = new DefaultHttpClient(connectionManager, parameters); 
1

ThreadSafeClientConnManager 또한 4.2로 제한된다. 대신 사용 org.apache.http.impl.conn.PoolingHttpClientConnectionManager

관련 문제