我有一个应用程序,它向数据服务器发出多个URL请求,以便下载用户数据。我试图通过并行发出10个请求来加快下载时间。我已经尝试了几种不同的方法来做到这一点,但我一直保持的结果是,虽然我同时发送了10个请求(几乎),但我一次只收到一个数据。这意味着总下载时间与我按顺序发出所有请求的时间相同。以下是我尝试过的不同内容。
两种情况都没有正确下载数据的问题,但它们都不会像我期望的那样快速地接收数据。服务器响应请求所需的时间约为0.5-1.0秒。因此,如果请求真正并行发出,我预计会在最多1秒内收到所有10个回复。在这两种方法中,我都观察到NSURLConnections都在大约5毫秒内启动,但是请求的connect:didReceiveResponse方法以大约0.7秒的间隔一个接一个地调用,就像请求是连续发出的一样。
我是否误解了NSURLConnections或NSOperationQueues的工作方式?任何帮助,将不胜感激。谢谢!
答案 0 :(得分:0)
如果您向具有多个NSURLConnection的同一服务器发出请求,那么您实施的两种方式几乎没有任何区别。但是,如果您与10个不同的服务器进行10次连接,则可能其中一个或两个非常慢并且需要时间来响应请求,然后第二个方法将花费很多时间,然后是第一个。在第二种方法中,下一个请求将仅在您从当前请求获得响应后发送,但在第一种方法中,因为请求正在以并行方式运行,因此请求将在获得响应后立即完成,下一个请求将排队。在这种情况下,如果maximumConcurrentOperation = 1,则两种方法都会给出相同的结果。
Approach 2:
<--t1--><--t2--><--t3--><------t4------><--t5--><--------t6--------><--t7--><--t8-->
<----------------------------------Total Time-------------------------------------->
Approach 1: maximumConcurrentOperation = 2
<--t1-->
<--t2-->
<--t3-->
<------t4------>
<--t5-->
<--------t6-------->
<--t7-->
<--t8-->
<--------------Total Time------------------>
希望这能清除你的怀疑。