2014-09-01 1 views
1

NSURLConnection 바코드를 스캔하고 NSURLConnection을 통해 XML을 보내고 Java 서비스가 나를 XML로 다시 보내는 응용 프로그램에서 NSURLConnection을 사용하고 있습니다. 여기 내 문제는 Wifi에서 응답 시간이 적당하지만 3G를 사용하면 속도가 느려지는 것입니다.NSURLConnection too slow

어떻게 3G에서 물건을 고정 할 수 있습니까?

NSString *xmlHomeMade = [NSString stringWithFormat: 
         @"<?xml version='1.0'?>" 
         "<service name='CorePDAService' method='blahblah'>" 
         "<arg class='java.lang.String'>%@</arg>" 
         "</service>",cab]; 


NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

NSString *ipAgence = [defaults objectForKey:@"ipAgence"]; 

NSLog(@"agence IP Test : %@",ipAgence); 


NSURL *url = [NSURL URLWithString:ipAgence]; 


NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url]; 
NSString *msgLength = [NSString stringWithFormat:@"%d", [xmlHomeMade length]]; 

[theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 
[theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"]; 
[theRequest setHTTPMethod:@"POST"]; 
[theRequest setTimeoutInterval:10]; 
[theRequest setHTTPBody: [xmlHomeMade dataUsingEncoding:NSUTF8StringEncoding]]; 


NSError *error = nil; 
NSURLResponse *urlResponse = nil; 
NSData* data = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&urlResponse error:&error] ; 


if(urlResponse == nil){ 

    if (error) { 

     [self displayAlert:@"" message:@"Error"]; 

    } 

} 


NSString* newStr = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; 


[self parseXML:data]; 
+0

네트워크 병목 현상처럼 들립니다. 요청 당 앱이 업로드/다운로드하는 데이터 양은 어느 정도입니까? – tia

답변

1

여기에 대한 대답은 암시 적입니다.

3G는 WiFi 연결 (아마 ADSL, VDSL 또는 케이블)보다 지터 & 대기 시간과 같은 네트워크 괴로움으로부터 훨씬 더 많은 고통을받는 셀룰러 기술입니다.

특히 (3G가 구현되는 방식으로 인해) 연결을 만들기 시작할 때 네트워크 리소스를 요청하고 채널을 할당해야합니다 (훨씬 더 복잡하지만 기본적으로 Jist입니다. 통신 하드웨어 공급 업체의 개발자가되어야 함).

3G 연결을 "속도를 높이는"유일한 방법은 a) 페이로드를 줄이거 나 b) 활성 연결 (무선 액세스 베어러)을 일관되게 유지하는 것입니다.

3G 기술은 대기 시간이 길고 폭발적입니다. 하나는 당신이 일반적으로 합리적인 속도로 (상대적으로) 작동하지만 처음에는 연결을 만들 때 몇 가지 심각한 지연이 버스트를 시작 버스트를 시작합니다.

일정 기간 동안 연결이 비활성 상태 인 경우 무선 네트워크 컨트롤러가 부여한 리소스가 삭제되고 다시 요청하는 것이 느려집니다.

+0

나는 소켓을 사용하는 것과 같이 시간을 절약 할 수있는 방법이 있는지 알고 싶다. 연결을 설정할 때마다 시간을 절약 할 수있다. 그런 것들. – Romain

+0

그게 바로 내가하는 말이다. 일관되게 연결된 소켓은 네트워크 활동의 속도와 응답 성을 절대적으로 향상시킵니다. – Woodstock

+0

소켓 사용법에 대한 정보가 있습니까? 몇 가지 예;) – Romain

0

나는이 문제를 다루었는데 얼마나 걸릴 수 있는지 알 수 없다! 오늘 나는 gzip 압축을 사용하여 사물을 고정시킬 수 있음을 알게되었습니다. 이것을 사용하려면 서버에 서버를 설치해야하며 좋은 소식은 서버에 apache2을 사용하고 있다면 기본적으로 제공된다는 것입니다. 대답은 '예 http://www.feedthebot.com/tools/gzip/

경우, 엑스 코드에있는 당신의 목표 - C 코드에 코드를 추가로 진행이 온라인 도구로 테스트 서버/URL이 gzip 압축을 활성화했다 확인하기 위해 테스트합니다. 코드에서이 줄을 후 :

NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url]; 

그냥이 다른 행을 추가

[theRequest addValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; 

이 눈에 띄게 응답 시간을 단축하며, 당신이 작은 NSURLRequest 또는 NSURLConnection에 대한 AFNetworking를 사용할 필요가 없습니다 태스크.

+0

고마워,이 프로젝트에서 더 이상 일하고 있지는 않지만 그 생각은 XML을 압축하고 더 나은 시간 응답을했습니다. 그래도 트위터 앱이 어떻게 쓰여지는지 모르겠다. JSON이 더 빠릅니까? – Romain

+0

음 ... 좋은 지적이야! 나는 모른다.나는 그것에 대해 생각해 본 적이 없었고 그러한 작은 트릭이 속도를 높일 수 있다는 것에 놀랐다. 그러나 JSON을 한번도 시도한 적이 없다. 그러나이 질문은 여기에 JSON 빠른 것을 확인하는 것 : http://stackoverflow.com/questions/4596465/is-parsing-json-faster-than-parsing-xml – Neeku