2012-04-18 2 views
1

NSURLConnection을 사용하여 GET을 통해 XML을로드하는 iOS 5 앱이 있습니다. 매우 드문 경우지만 연결이 반복적으로 시간 초과되는 상황에서 연결이 중단 된 것처럼 보입니다.NSURLConnection Hanging

예 요청 : 요청이 중단 시작할 때

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request setURL:[NSURL URLWithString:url]]; 
/* 
The request is set with a timeout interval of 10 because (due to the nature of 
the app and the XML feed) this data is reloaded every 15 seconds. 
*/ 
[request setTimeoutInterval:10]; 
[request setCachePolicy:NSURLRequestReloadIgnoringCacheData]; 
[request setHTTPMethod:@"GET"]; 
self.afOperation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
self.afOperation.successCallbackQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,0); 
self.afOperation.failureCallbackQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,0); 
//snip success/completion block code 
[self.afOperation start]; 

는 지금까지 세 "복구"시나리오를 본 적이있다.

  • 은 (예, 정말) 컴퓨터에 전체 응용 프로그램
  • 꽂 장치를 종료합니다. iPhone/iPad가 연결을 인식 한 직후 즉시 시간 초과가 중지됩니다.
  • 앱을 종료하고 잠시 다른 작업을 수행하십시오. 앱을 신속하게 종료했다가 다시 시작하면 일반적으로 복구가 불가능합니다.

당신이 상상할 수 있듯이, 나는이 엄청난 기괴한 발견. 이 시점에서 필자는 자신의 NSURLConnectionDelegate 구현을 AFNetworking (위에서 보았 듯이)으로 대체했으며 여전히 동일한 문제를 겪고 있습니다. 모든 NSURLConnectionDelegate 프로토콜 선택기에 로깅을 추가했으며 (start을 호출 한 후) 유일한 선택기가 connection:didFailWithError:임을 확인했습니다. 나는 여러 요청 (이전 요청은 항상 취소되고 새로운 요청을 시작하기 전에 nil'd)을 쌓지 않도록합니다. 또한 라우터에서 tcpdump를 통해 실제로 요청을 보내지 않았 음을 확인했습니다. 이러한 유형의 행동을 일으킬 수있는 요인은 무엇입니까?

+0

안녕 바울이 당신을 요구하는 약간의 벤치 마크를 만들기 위해 노력했다 (빌드 단계에서 ASIHttpRequest 및 ASIFormDataRequest 파일에 대한 해제 컴파일러 최적화) 아래 링크에서 솔루션 다음 브라우저의 URL 및 응답 시간을 기록하십시오. 시간 초과 요청은 일반적으로 서버 측의 대역폭 또는 문제로 인해 발생합니다. 타임 아웃에서 더 높은 숫자를 입력하면 다시 발생합니까? – Andrea

+0

@ 안드레아는 불행히도 도움이되지 않습니다. 이 발생의 증상은 단일 타임 아웃이 아니라 일련의 끝없는 연속입니다 (서버에서 동일한 URL 집합을 다시 요청 함). 예를 들어 랩톱의 브라우저와 같은 다른 방법을 통해 정확한 URL을 가져 오는 경우 iOS 앱이 시간 초과되는 동안 완벽하게로드됩니다. 위에 나열된 3 가지 방법 만 시간 초과 동작을 중지합니다. –

+0

이상한, 나는 다른 응용 프로그램에서 연결 메커니즘을 분리하려고 시도하고 AF 대신 일반 NSUrlConnection을 사용하여 변경 가능한 일반적인 요청을하지 않으려 고 시도했다. – Andrea

답변