Как решить проблемы тайм-аута, вызванные плохим постоянным соединением HTTP?
Недавно я боролся с проблемой тайм-аута HTTP. После более чем одного месяца расследования я вполне уверен, что это вызвано плохими постоянными соединениями HTTP. Детали следующие:
Это приложение для iOS.Большинство пользователей используют iOS 8.я используюNSURLConnection
.iOS 8 имеет одинизвестенkeep alive
ошибка но мой другой вопрос. Более конкретно, эта ошибка вызываетNSURLErrorNetworkConnectionLost
но моя ошибкаNSURLErrorTimedOut
, Однако я не уверен, вызвана ли моя проблема еще одной ошибкой iOS 8.Поведение моей проблемы: после некоторого времени использования - после успешной отправки некоторых HTTP-запросов и получения соответствующих ответов - один запрос вызоветNSURLErrorTimedOut
и все последующие (не слишком далеко от последнего по времени, чтобы повторно использовать постоянное соединение) запросы вызовутNSURLErrorTimedOut
.Некоторое рабочее решение:Убейте и перезапустите приложение.Отключите соединение WiFi на iPhone, чтобы принудительно использовать 3G / 4G.Включите воздушный режим, а затем выключите его.Мой анализ: Судя по поведению, проблема, по-видимому, вызвана плохим постоянным соединением. Все последующие запросы продолжают использовать это постоянное соединение, поэтому все сбой сNSURLErrorTimedOut
, Из обходного пути мы можем увидеть, что все они работают, потому что они вызывают сбой плохого постоянного соединения и создание нового постоянного соединения.Мои вопросы:
Кто-нибудь еще сталкивался с этой проблемой?Это известная ошибка iOS 8?Это вызвано какой-то нетрадиционной конфигурацией серверов? Я не контролирую серверы, но я знаю, что они используют nginx 1.6.1, и их инженеры работают со мной над расследованием этой проблемы. Какую информацию я должен спросить их?Есть ли способ заставитьNSURLConnection
не повторно использовать текущее постоянное соединение, а создать новое, чтобы я мог обойти эту проблему после того, как обнаружу ее в своем коде?Обновить:Я успешно справился с этой проблемой на iOS 8, используяCFNetwork
и контрольConnection
Заголовок напрямую. Однако, похоже, проблема обостряется на iOS 9.
Так как моя надежда, что Apple исправит это на iOS 9, разбита, я наконец-то запустил радар:http://www.openradar.me/22770738.
Если вы также столкнулись с этой проблемой, пожалуйста, продублируйте мой радар или, что еще лучше, запустите свой собственный радар, если у вас есть более надежно воспроизводимый образец.