对多个NSURLConnection响应进行故障诊断

时间:2012-05-31 22:00:44

标签: iphone nsurlconnection nsoperation nsoperationqueue ios5.1

我有一个应用程序,它向数据服务器发出多个URL请求,以便下载用户数据。我试图通过并行发出10个请求来加快下载时间。我已经尝试了几种不同的方法来做到这一点,但我一直保持的结果是,虽然我同时发送了10个请求(几乎),但我一次只收到一个数据。这意味着总下载时间与我按顺序发出所有请求的时间相同。以下是我尝试过的不同内容。

  1. 创建了一个NSOperation的子类,它具有NSURLConnection对象,并充当该NSURLConnection的委托。将此NSOperation子类的10个实例添加到NSOperationQueue。
  2. 创建了10个NSURLConnection对象并一个接一个地启动它们。 (使用单独的委托对象,以便我可以保持响应。)
  3. 两种情况都没有正确下载数据的问题,但它们都不会像我期望的那样快速地接收数据。服务器响应请求所需的时间约为0.5-1.0秒。因此,如果请求真正并行发出,我预计会在最多1秒内收到所有10个回复。在这两种方法中,我都观察到NSURLConnections都在大约5毫秒内启动,但是请求的connect:didReceiveResponse方法以大约0.7秒的间隔一个接一个地调用,就像请求是连续发出的一样。

    我是否误解了NSURLConnections或NSOperationQueues的工作方式?任何帮助,将不胜感激。谢谢!

1 个答案:

答案 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------------------>

希望这能清除你的怀疑。