所以我知道在旧的AFNetworking中可以使用AFHTTPClient, 我知道如果我使用AFHTTPRequestOperationManager,我可以设置队列的限制,但我不能让AFHTTPSessionManager一次只运行x个请求,而不是我自己使用成功块(我不想这样做)实现它。 / p>
以下代码并未限制我的连接:
AFHTTPSessionManager * manager = [AFHTTPSessionManager manager]; manager.operationQueue.maxConcurrentOperationCount = 1;
根据一个有趣的讨论here,我向服务器发出了很多请求,并且在我超时之前就把它扼杀了,所以我真的需要限制我的并发连接。
我错过了什么?
答案 0 :(得分:22)
AFHTTPSessionManager
使用任务而不是操作(具体为NSURLSessionDataTask
),这就是您无法设置操作队列的原因。
正如您在the implementation of this class中看到的那样,任务立即启动([task resume]
),而不会添加到任何类型的队列中。
因此,遗憾的是,没有内置的AFNetworking方法来设置使用AFHTTPSessionManager
的并发任务数量的限制。
可能的替代方案:
AFHTTPRequestOperationManager
代替(这就是我正在做的事)NSOperation
子类,并在子类的[operation start]
方法中启动任务如果您的请求全部来自同一主机,请直接访问基础URL加载系统中的HTTPMaximumConnectionsPerHost
选项,如下所示:
[NSURLSessionConfiguration defaultSessionConfiguration].HTTPMaximumConnectionsPerHost = 4;
这种方法有很多注意事项,在the Apple documentation中讨论过。
如果您最终做#2,请将其作为拉取请求提交给AFNetworking - 这将是一个受欢迎的补充。
答案 1 :(得分:1)
您可以配置AFHTTPSessionManager
NSURLSessionConfiguration
:
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
config.HTTPMaximumConnectionsPerHost = 2;
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:config];