2012-10-16 5 views
1

그래서 나는 api의 호출과 몇 개의 웹 페이지를 긁어 모으는 다중 스레드 프로그램을 실행하고 있습니다. 비정상적인 경우, httpget은 끔찍하게 실패 할 것이고 프로그램이 멈추게 될 것입니다 (스레드가 종료되지 않고 스레드 풀이 닫히지 않고 메인이 종료되지 않는 등)HttpClient (Httpget) timeouts 처리하기

http 연결에 시간 초과를 설정해야합니다 나는 만들고있어. DefaultHttpClient를 사용하고 있습니다.

DefaultHttpClient httpclient = new DefaultHttpClient(); 

나는 어떤 매개 변수도 설정하지 않습니다.

시간 초과를 처리하는 데 도움이되거나 적어도 제한 시간을 처리해야하는 곳을 알려줄 수 있습니까? (아파치에는 좋은 예제가없는 것처럼 보이는 훌륭한 라이브러리가있는 것 같다.)

답변

6

다음과 같이하십시오.

int connectiontimeout = 1000; //1 second 
int sockettimeout = 1000; 

HttpParams httpparameters = new BasicHttpParams(); 

HttpConnectionParams.setConnectionTimeout(httpparameters, connectiontimeout); 
HttpConnectionParams.setSoTimeout(httpparameters, sockettimeout); 

HttpClient httpclient = new DefaultHttpClient(httpparameters); 
+0

이것은 더 이상 사용되지 않습니다. – onejigtwojig

+1

버전 4.2에서 작동합니다. – user2601995

0

두 가지 중 하나를 사용하는 것이 좋습니다.

HttpConnectionParams.setConnectionTimeout(int) 

HttpConnection.setConnectionTimeout(int) 

는 같이

HttpConnectionParams.setConnectionTimeout(httpParams, 5000); 
1

당신은 HttpConnectionParams를 원한다. 당신은 연결 시간 초과를 구분해야 할 가능성이되며, 소켓 시간 초과

SO_TIMEOUT 에 대한 제한 시간 (밀리 초) 기본 소켓 제한 시간 (SO_TIMEOUT)을 정의합니다 (관련 하지 연결 읽기 위해) 데이터를 기다리고 있습니다.

CONNECTION_TIMEOUT 연결이 완료 될 때까지의 시간 초과를 결정합니다.

자세한 내용은 here을 참조하십시오. 이러한 옵션.