Ограничение установки одновременных задач в AFNetworking 2 с запуском AFHTTPSessionManager

поэтому я знаю, что в старой AFNetworking это было возможно с использованием AFHTTPClient, и я знаю, что если я использую AFHTTPRequestOperationManager, я могу установить предел очереди, но я не могу заставить AFHTTPSessionManager запускать только запросы x за раз, не используя его самостоятельно, используя блок успеха (который я не хочу).

Следующий код НЕ ограничивал мои подключения:

AFHTTPSessionManager * manager = [Менеджер AFHTTPSessionManager];     manager.operationQueue.maxConcurrentOperationCount = 1;

В соответствии с интересным обсуждением здесь, у меня много запросов на мой сервер, и я задыхаюсь, пока не получаю таймауты, поэтому мне действительно нужно ограничить мои параллельные соединения.

Что мне не хватает?

Ответы

Ответ 1

AFHTTPSessionManager использует задачи вместо операций (NSURLSessionDataTask, в частности), поэтому вы не можете установить очередь операций.

Как вы можете видеть в реализации этого класса, задачи сразу же запускаются ([task resume]) и не добавляются в какую-либо очередь.

Следовательно, и, к сожалению, нет способа встроенного AFNetworking установить ограничение числа одновременных задач с помощью AFHTTPSessionManager.

Возможные альтернативы:

  • Используйте AFHTTPRequestOperationManager вместо этого (это то, что я делаю)
  • Создайте подкласс NSOperation, у которого есть задача как свойство, и запустите задачу в методе [operation start] вашего подкласса
  • Создайте серийную очередь Grand Central и создайте и запустите задачи в этой очереди
  • Если ваши запросы находятся на одном хосте, напрямую обращайтесь к опции HTTPMaximumConnectionsPerHost в системе загрузки URL-адресов, например:

    [NSURLSessionConfiguration defaultSessionConfiguration].HTTPMaximumConnectionsPerHost = 4;
    

    Этот подход имеет ряд предостережений, которые обсуждаются в документации Apple.

Если вы закончите делать # 2, отправьте его как запрос на перенос в AFNetworking - это было бы приятным дополнением.

Ответ 2

Вы можете настроить AFHTTPSessionManager NSURLSessionConfiguration:

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

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