我在我的应用程序中使用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];
答案 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
进行小型NSURLRequest
或NSURLConnection
任务。