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

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

以下代码不会限制我的连接:

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

在这里有一个有趣的讨论,我有很多的要求,我的服务器,我呛它,直到我超时,所以我真的需要限制我的并发连接。

我错过了什么?

AFHTTPSessionManager使用任务而不是操作(特别是NSURLSessionDataTask ),这就是为什么你不能设置操作队列。

正如你在这个类的实现中看到的那样,任务立即开始( [task resume] ),而不是添加到任何types的队列中。

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

可能的select:

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

     [NSURLSessionConfiguration defaultSessionConfiguration].HTTPMaximumConnectionsPerHost = 4; 

    这种方法有一些注意事项,在Apple文档中讨论。

如果你结束了第二轮,请把它作为一个拉动请求提交给AFNetworking – 这将是一个受欢迎的补充。

你可以configurationAFHTTPSessionManager NSURLSessionConfiguration

 NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; config.HTTPMaximumConnectionsPerHost = 2; AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:config];