NSURLConnection太慢了

时间:2014-09-01 14:58:46

标签: ios xml nsurlconnection

我在我的应用程序中使用NSURLConnection,我扫描条形码,通过NSURLConnection发送XML,java服务向我发回XML。 我的问题是,使用Wifi,响应时间不错,但是当我使用3G时,它的速度很慢。

如何设法在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];

2 个答案:

答案 0 :(得分:1)

这里的答案是隐含的。

3G是一种蜂窝技术,它受到更多来自网络恶意软件的影响,例如Jitter&amp;延迟时间比您的WiFi连接(可能是ADSL,VDSL或电缆)。

特别是(由于实施3G的方式)当它开始创建连接时,它必须请求网络资源并分配一个频道(它比这复杂得多 - 但它基本上是jist,我曾经是电信硬件供应商的开发人员。)

&#34;速度&#34;唯一真正的方式建立3G连接要么a)减少有效载荷,要么b)保持有效连接(无线接入覆盖)。

3G作为一种技术是高延迟和突发性。一个你开始爆发,它通常以合理的速度(相对)运行,但最初创建连接时有一些严重的延迟。

当连接处于非活动状态一段时间后,它将丢弃无线网络控制器授予的资源,并且重新请求这是减速的一部分。

答案 1 :(得分:0)

我一直在处理这个问题,我不知道多久了!今天我了解到我可以使用gzip压缩来加固东西。要使用它,你需要在服务器上安装它,如果你在服务器上使用apache2,那么好消息就是它默认出现。要测试以确保您的服务器/网址已启用gzip压缩,请使用此在线工具对其进行测试: http://www.feedthebot.com/tools/gzip/

如果答案是肯定的,请继续将代码添加到Xcode中的Objective-C代码中。在代码中的这一行之后:

NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];

只需添加另一行:

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

这会显着加快您的响应时间,并且您无需使用AFNetworking进行小型NSURLRequestNSURLConnection任务。