目前,我正在使用一个应用程序,该应用需要多次调用后端服务器。在WiFi上,应用程序连接正常并下载非常快,但是当3G上的连接似乎有点不稳定且非常慢。
所以我做了一些非常简单的测试用例(您在下面找到)。似乎Nsurlconnection并未以相同的响应速度获取数据。
(请注意,我已删除了我连接到的真实服务器的URL)
测试用例:
放置在服务器上以下PHP脚本:
<?php echo 'hello world' ?>
抓住iPhone,将WiFi关闭并确保其具有适当的3G连接。
使用以下Objective-C代码连接到服务器:
nsurl * url = [nsurl urlwithstring:@" http://someserver.com/test.php"];
nsurlrequest * request = [nsurlrequest requestWithUrl:url];
nsdate * startDate = [nsdate date];
nslog(@" start");
nsurlConnection *连接= [nsurlConnection sendsynchronousrequest:请求returningResponse:nil错误:nil];
nslog(@"%3.2F", - [StartDate TimeIntervalsIncEnow]);
这将以3G -1.47秒返回。因此,如果您首次使用3G连接,这可能是正常的,因为它需要初始化。但是现在是有趣的部分。如果您多次重复此通话,它将返回以下内容:
1.47秒
2.33秒
1.1秒
我已经使用两个不同的iPhone和两个不同的提供商进行了测试:T-Mobile和KPN。我还使用通常使用的nsurlconnection的异步版本尝试了一下,但这也返回相同的结果。
(我也做过的其他事情:检查了Apple的Reachabilty.h,通过IP-NUMBER替换服务器URL删除了DNS查询,使用了其他服务器并使用了https://www.google.nl/search?q =%i,arc4random(),也尝试了[nsstring alloc] initwithcontentofurl]。所有这些都返回了一个类似的结果,除非使用iPhone浏览器:Safari,safari立即响应。)
)我还使用Android手机测试了类似的东西,但随后我得到了500ms的快速响应(使用同一提供商)。
有人以前遇到过吗?如果是这样,您是如何解决此问题的,是什么原因导致了连接的问题?
我也有一个类似的问题,因为在3G连接上自然而然的问题会根据发送的数据量而稍慢。但是,如果我发送同步请求的要求比异步方法更快。我注意到的是,在使用异步的3G连接上,操作系统必须关闭连接,您可能会在日志" purgeidlecellconnections:找到一个用于清除conn"的日志中,似乎增加了一些时间来执行方法。