iphone отложен ответ от сервера

Как только я отправляю запрос на сервер (через NSURLConnection sendSynchronousRequest через NSURLConnection ), сервер получает его примерно через 2 секунды, он обрабатывает и отправляет ответ в течение 3-5 секунд. Тем не менее, я возвращаю ответ только через 30-35 секунд. Эта задержка делает наше общение очень медленным.

Даже асинхронные API получают отложенный ответ.

Раньше все работало нормально, а клиент получал ответ в течение 10 секунд. Кто-нибудь еще с этим вопросом? Что может быть причиной?

EDIT вот скриншот анализа Wireshark :

Ссылка на лучшее изображение

введите описание изображения здесь

Как я должен видеть, какой пакет говорит что? .. и почему он задерживается?

EDIT2 Вот код:

  NSHTTPURLResponse *response=nil; NSMutableURLRequest *theRequest=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:nsURL] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:180.0]; [theRequest setHTTPMethod:@"POST"]; [theRequest setTimeoutInterval:180.0]; [theRequest setHTTPBody:[[NSString stringWithFormat:@"%@",sdata] dataUsingEncoding:NSASCIIStringEncoding]]; NSError *error= nil; NSData *result = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:&error]; if (error ) { NSLog(@"error sending synchronous request: %@", error); } NSLog(@"request completed with code:%d",response.statusCode); 

5 Solutions collect form web for “iphone отложен ответ от сервера”

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

Откуда вы знаете, когда получен ответ iOS? NSLog? Изменение состояния пользовательского интерфейса?

См. Также следующие вопросы:

NSURLConnection sendSynchronousRequest – фон для переднего плана

NSURLConnection sendSynchronousRequest занимает слишком много времени для ответа

Обновить

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

  • Стратегия 1: попробуйте использовать NSURL вызов соединения NSURL вместо синхронного
  • Стратегия 2: попробуйте использовать другую HTTP- библиотеку , такую ​​как AFNetworking

Если вы хотите более внимательно изучить, что происходит с HTTP-соединением, вы можете использовать такие инструменты, как Charles , Fiddler или Wireshark, чтобы отлаживать, какие данные отправляются и принимаются. Чтобы получить максимальную выгоду от такого рода анализа, вам нужно знать некоторые протоколы (протоколы) HTTP. Это, вероятно, больше времени, чем ранее упомянутые стратегии.

См. Также такие вопросы, как « Как отслеживать сетевые вызовы, сделанные с помощью iOS Simulator» .

Обновить

Вы обращаетесь к самому веб-серверу или кому-то другому?

Вы внимательно изучили заголовки, отправленные на ваш веб-сервер (и те, которые были возвращены)? Обратите внимание на длину содержимого, например. Неправильная длина содержимого может вызвать задержку, как объясняется здесь .

Чтобы увидеть запрос и возвращенные заголовки, вы можете использовать Firebug или что-то вроде wget или curl в командной строке.

Кроме того, дважды проверьте, что в конце вашего URL нет новой строки, как описано здесь .

Решение, которое сработало для меня:

В заголовках запросов iOS устанавливает «gzip» для «Accept-Encoding» по умолчанию. Сжатие gzip занимало много времени и, следовательно, отложенный ответ. Для решения проблемы я сделал следующее:

 [theRequest setValue:@"" forHTTPHeaderField:@"Accept-Encoding"]; 

ПРИМЕЧАНИЕ. Проверьте свои заголовки для любой задержки ответа.

Благодаря @occulus для направления мне в заголовки запроса!

Вы делаете это через Wi-Fi или celluar?

Говоря по моему опыту, когда мое использование данных изъято, мой телефон-провайдер замедляет мои загрузки. Иногда это случается со мной в конце месяца после того, как я использовал много мобильных данных.

Я не уверен, но это может быть проблема с сетью, прежде всего, проверить его. это правильно или вниз? хорошо Может быть, я ошибаюсь .. но сначала проверьте это …

После описания кода он может решить вашу проблему 🙂

 NSString *url = @"Your URL "; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0]; [request setHTTPMethod:@"POST"]; NSMutableData *body = [NSMutableData data]; . . /// Add Here Your NSMutableData Valuew . . [request setHTTPBody:body]; NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; if (theConnection) { self.responseData = [[NSMutableData alloc] init]; } else NSLog(@"Connection Failed!"); 

Чтобы облегчить ваши проблемы с асинхронным HTTP-запросом, вам следует рассмотреть возможность использования инфраструктуры AFNetworking

  • NSURLConnection запущен в другом потоке. Недопустимые методы делегата
  • NSURLConnection и sendAsynchronousRequest: queue: completeHandler: - выполняется ли блок завершения в основном потоке
  • Почему запросы iOS8 SSL прерываются с переходом из iOS7?
  • Декодирование частичного UTF-8 в NSString
  • Как проверить Response.statusCode в sendSynchronousRequest на Swift
  • Время ожидания NSURLRequest IOS
  • Какова ситуация с тайм-аутом NSURLConnection с iOS5?
  • Разбор Xml в учебнике iOS
  • NSUrlConnection и cURl
  • NSMutableURLRequest «Задержка с запросом». ,
  • Поток по-прежнему работает в старом виде
  • Interesting Posts

    Невозможно использовать #define для удобства

    Клавиатура не отбрасывается при использовании другого UITextField, который вызывает сборщик

    Создание профиля создания на XCode

    opengl es2 премультиплексируется против прямого альфа + смешивания

    iOS UITableView с динамическим текстом и изображениями, отображаемыми вместе (NSAttributedString + images)

    Прерывистая ошибка при доступе к базе данных моделей данных / контактов

    ITunesConnect не отображает дополнительные языки для отправки на рассмотрение

    Правильный способ вставки данных в SQLite db iPhone

    UITextView – обрезать текст на iOS 6, показывающий многоточие (используя Autolayout)

    Есть ли способ обнаружить статус роуминга на iOS 6?

    Как открыть файл в iOS?

    Как сделать libtiff для проекта Xcode и приложения iOS?

    Пользовательский заголовок таблицы TableView перекрывает ячейки представления таблицы

    Отображение данных в формате HTML в UITextView

    Почему значение NSFileSystemFreeSize отличается от свободного размера, указанного в настройках iOS?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.