2012-11-26 6 views
1

내 서버에 대한 원격 서버 호출에서 다음과 같은 예외가 발생합니다.AsyncTask에서 연결 시간이 초과되었습니다.

java.net.SocketException: Connection timed out 
java.net.SocketTimeoutException: Connection timed out 
java.net.ConnectException: failed to connect to www.my_url.com/my_ip (port 80): connect failed: ETIMEDOUT (Connection timed out)

내 서버가 가동되었지만 어떤 이유로 응답하지 않는 시간이 적습니다.

이러한 예외는 어떻게 해석합니까? 시간이지기 전에 서버와의 연결 시간을 늘릴 수있는 일반적인 수정 프로그램입니까?

제 서버는 PHP를 실행하는 아파치입니다.

미리 제안 해 주셔서 감사합니다.

+0

나는이 똑같은 문제를 가지고 있습니다. 그러나 그것은 너무도 정기적으로 일어나서 제 서버가 아닌 것을 압니다. AsyncTask 코드와 관련이 있습니까? 최근에 AsyncTask에 네트워크 코드를 옮겼습니다. * 지금 오류가 있습니다. UI 스레드에서 네트워크 호출을했을 때 나에게 이런 일이 일어난 적이 없었습니다 ... –

답변

3

당신이 뭔가 일을하고 나중에 다시 시도, 당신의 법의학 위해를 기록하고, 그들이 그 자주하지 희망하지 않은 사용자에게 메시지를 표시 이외의 클라이언트에서 다음에 대해 할 수있는 일은 없다. 그러나 귀하의 서버가 여러 가지 이유로 인해 반응이 없으며 귀하가 할 수있는 일이 있다고 생각됩니다.

이와 같은 시간 초과가 발생하면 서버의 부하를 확인하십시오. top을 실행하고 CPU를 먹는 것을 봅니다. 백그라운드 작업이 실행 중이거나 응용 프로그램의로드가 많은 경우 CPU를 먹는 백그라운드 작업이 있다면 코드를 프로파일 링하고 알고리즘이 어디에서 뜨겁게 달리고 개선되어야하는지 찾아야합니다. 로드 문제가 있거나 코드를 실제로 향상시킬 수없는 경우 서버 속도를 높이고 메모리를 늘리며 캐싱을 배치하고 DB를 늘리고 Quercus (C PHP보다 4 배 향상된 성능)를 실행해야합니다. 또는로드 밸런서를 사용하여 더 많은 서버를 확보하고 수평 확장 할 수 있습니다. 후자는 응용 프로그램의 아키텍처에 많이 달려 있지만, 수정할 수있는 부분입니다.

+1

많은 좋은 poitners와 와우 훌륭한 답변! 고맙습니다 :) – Genadinik

4

이러한 오류는 인터넷에 액세스하는 앱의 경우 정상입니다. 아래 그림과 같이

그러나, HTTP 요청에 대한 시간 제한 값을 변경하여 자신의 발생을 줄이기 위해 시도 할 수 :

HttpGet httpGet = new HttpGet(url); 
HttpParams httpParameters = new BasicHttpParams(); 
// Set the timeout in milliseconds until a connection is established. 
// The default value is zero, that means the timeout is not used. 
int timeoutConnection = 3000; 
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); 
// Set the default socket timeout (SO_TIMEOUT) 
// in milliseconds which is the timeout for waiting for data. 
int timeoutSocket = 5000; 
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); 
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters); 
HttpResponse response = httpClient.execute(httpGet); 

는 기존 HTTPClient (예 : DefaultHttpClient 또는 AndroidHttpClient의 매개 변수를 설정하려면) setParams() 함수를 사용할 수 있습니다. 있다

httpClient.setParams(httpParameters); 
관련 문제