目前我正在开发一个需要多次调用后端服务器的应用程序。使用 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 日期];
NSLog(@"开始");
NSURLConnection * 连接 = [NSURLConnection sendSynchronousRequest:request returnedResponse:nil error:nil];
NSLog(@"%3.2f", -[startDate timeIntervalSinceNow]);
这在 3G 上返回 - 1.47 秒。因此,如果您是第一次使用 3G 连接,这可能是正常的,因为它需要初始化。但现在有趣的部分来了。如果您多次重复此调用,它将返回以下内容:
1.47 秒
2.33 秒
1.1 秒
我已经使用两个不同的 iPhone 和两个不同的提供商对此进行了测试:T-Mobile 和 KPN。我也尝试过使用我通常使用的异步版本的 NSURLConnection,但这也返回了相同的结果。
(我还做了其他事情:检查 Apple 的 Reachabilty.h,通过将服务器 url 替换为 ip 号来删除 DNS 查找,使用其他服务器并使用https://www.google.nl/search?q= %i , arc4random(), 也尝试了 [NSString alloc]initWithContentOfURL]。除了使用 iPhone 浏览器时,都返回了类似的结果:Safari,它立即响应。)
我还使用 Android 手机测试了类似的东西,但随后我得到了 500 毫秒的快速响应(使用相同的提供程序)。
以前有人遇到过这种情况吗?如果是这样,您是如何解决这个问题的?是什么导致了这个连接问题?