我试图尽可能多地同时执行http下载IPad2(ios6.0)。这纯粹用于测试此设备上可能的内容。甚至对GUI性能不感兴趣(如果没有响应则不重要)
我创建了一个特殊的HTTP服务器,它向客户端发送x分钟数据。收到的数据并不重要。我只测量了多少并发下载的速度。 我已经实现了两种不同的方式来安排12个HTTP请求。
通过在队列中使用NSOperation对象并在12上设置NSOperationQueueDefaultMaxConcurrentOperationCount来完成一个
第二个实现是创建12个执行同步http请求的NSThread。
请求全部发送到同一目标IP。
我观察到的是,在这两种情况下,第6到第12个请求都得到一个TimeOut(错误代码-1001)。如果1将超时值设置为80.0秒,我看到第1次完成后第6次下载开始。
答案 0 :(得分:18)
同一服务器最多可以同时连接5个。这是iOS固定限制,可能是因为某些http协议限制。您可以阅读更多信息here。
答案 1 :(得分:2)
在查看项目之后,我在Apple's documentation找到了NSURLSessionConfiguration的内容。
来自Apple的文档 -
此属性确定最大同时数 基于此的会话中的任务与每个主机建立的连接 配置。
此限制是针对每个会话的,因此如果您使用多个会话,则应用 整体可能超过这个限制。另外,取决于你的 连接到Internet,会话可能使用的下限 你指定的那个。
OS X中的默认值为6,iOS中的默认值为4。
答案 2 :(得分:1)
IOS中是否存在对并发下载量的限制?
顺便说一句,这是基于每个服务器的限制,而不是iOS限制。如果您尝试同时从不同的服务器执行此操作,您将看到可以超出当前限制。
还有其他方法可以执行这些并发下载吗?
显然你也可以用GCD做一些事情,手动管理并发请求,但我认为NSOperationQueue
是一个很好的解决方案,并且没有理由进一步看待它。我当然也不认为使用线程有任何好处。
随着并发请求数量的增加,你应该对总的经过时间进行基准测试,但我相信你会达到收益递减的程度。只是拥有更多并发请求并不能确保更好的总体性能。
答案 3 :(得分:0)
如果有人还在寻找,只是碰到这个。我在iPhone6S +上看到它同时是4。这是我的测试步骤:
结果就像发条一样。第一个响应(其中4个)在请求后12秒返回(大概是2秒打开无线电或其他),但随后每个4个响应的块在前一个块4后10秒后出现。所有4个响应时间。
希望能有所帮助。