在运行AFHTTPSessionManager的AFNetworking 2中设置对并发任务的限制

时间:2014-01-28 17:00:12

标签: ios network-programming afnetworking afnetworking-2 nsurlsession

所以我知道在旧的AFNetworking中可以使用AFHTTPClient, 我知道如果我使用AFHTTPRequestOperationManager,我可以设置队列的限制,但我不能让AFHTTPSessionManager一次只运行x个请求,而不是我自己使用成功块(我不想这样做)实现它。 / p>

以下代码并未限制我的连接:

  

AFHTTPSessionManager * manager = [AFHTTPSessionManager manager];       manager.operationQueue.maxConcurrentOperationCount = 1;

根据一个有趣的讨论here,我向服务器发出了很多请求,并且在我超时之前就把它扼杀了,所以我真的需要限制我的并发连接。

我错过了什么?

2 个答案:

答案 0 :(得分:22)

AFHTTPSessionManager使用任务而不是操作(具体为NSURLSessionDataTask),这就是您无法设置操作队列的原因。

正如您在the implementation of this class中看到的那样,任务立即启动([task resume]),而不会添加到任何类型的队列中。

因此,遗憾的是,没有内置的AFNetworking方法来设置使用AFHTTPSessionManager的并发任务数量的限制。

可能的替代方案:

  1. 使用AFHTTPRequestOperationManager代替(这就是我正在做的事)
  2. 构建一个具有任务作为属性的NSOperation子类,并在子类的[operation start]方法中启动任务
  3. 创建Grand Central串行队列并在此队列中创建和启动任务
  4. 如果您的请求全部来自同一主机,请直接访问基础URL加载系统中的HTTPMaximumConnectionsPerHost选项,如下所示:

    [NSURLSessionConfiguration defaultSessionConfiguration].HTTPMaximumConnectionsPerHost = 4;
    

    这种方法有很多注意事项,在the Apple documentation中讨论过。

  5. 如果您最终做#2,请将其作为拉取请求提交给AFNetworking - 这将是一个受欢迎的补充。

答案 1 :(得分:1)

您可以配置AFHTTPSessionManager NSURLSessionConfiguration

NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
config.HTTPMaximumConnectionsPerHost = 2;

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:config];