我的应用程序似乎在蜂窝网络上工作非常繁琐 - 用户界面通常有旋转器而不是图像,但并非总是如此。它使用由并发NSOperations驱动的NSURLConnections。它在WIFI上工作正常 - 完全没问题。
我发现我获得了很多NSURLConnection超时,但不知道为什么。如何查找此问题?
答案 0 :(得分:7)
为了追踪问题,我首先测量了最大并发连接数,并发现这一直是55左右。
将最大值减少到10(通过设置操作队列最大值,减少超时,但仍然不完美
将最大值减少到4 - 甚至更少的超时但仍然有一些
将最大值设置为1 - 这必须起作用,对吧?都能跟得上!
有时应用程序可以正常工作而根本没有并发(max == 1),但它仍然在大约一半的时间内失败。
所以我与Apple烧毁了一个支持事件,并得到了一位经验最丰富的工程师提供建议。基于他的建议,我尝试了以下内容:
在不同运营商的移动网络(Verizon)上运行该应用,效果非常好。所以问题不是蜂窝本身(或iOS),而是AT& T的蜂窝网络(纽约和新泽西都失败了)
从http切换到https,现在它在AT& T上完全并发完美无缺
调查了网络端点以确定其功能,结果证明它非常差(更晚些时候)。我尝试了一个具有更多功能的不同Web端点,原始问题使用http。
我从中学到的内容如下:
使用iOS5.1或iOS6
如果您在AT& T 3G上遇到此问题且正在使用http,请尝试切换到https
如果端点使用HTTP1.0且不支持“连接:保持活动”,那么每个http请求都会设置并拆除TCP连接。我相信这会让我们感到沮丧。蜂窝网络的原因是AT& T断开我的一些会话,但当然无法确定这一点。
使用支持持久连接的HTTP1.1服务,问题就消失了。在这种情况下,没有TCP连接抖动。
一些HTTP1.1服务支持'流水线',iOS(使用NSURLRequest设置,HTTPShouldUsePipelining),如果我可以切换到这个,那么我的性能应该会大大提高
有一个WWDC 2012视频,讨论如何提高网络性能:会话706"网络最佳实践"
修改
所以当我剥洋葱时,这变得更奇怪!在进一步讨论之后,一些网络用户使用CloudFront进行了测试,并确实接受了“连接:保持活着”。我一遍又一遍地尝试让它上班,但不能。
网络专家建议我在使用https时尝试使用低,看看它确实如此!出于某种原因,使用' http'在AT& T 3G上,该标题标记被删除或被忽略。我也用Wifi测试了我的应用程序。在所有情况下,除了AT& T / 3G之外,连接'在回复中被退回。