3

目前我正在开发一个需要多次调用后端服务器的应用程序。使用 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 毫秒的快速响应(使用相同的提供程序)。

以前有人遇到过这种情况吗?如果是这样,您是如何解决这个问题的?是什么导致了这个连接问题?

4

1 回答 1

0

我有一个类似的问题,自然地通过 3g 连接,根据发送的数据量,发布请求会稍微慢一些。但是,如果我通过同步请求发送它比异步方法更快。我注意到的是,通过使用异步的 3g 连接,操作系统必须关闭连接,您可能会在日志中注意到“purgeIdleCellConnections:找到一个清除 conn”似乎为方法执行增加了一些时间。

于 2012-12-24T00:01:29.370 回答