NSURLConnection игнорирует тайм-аут Keep-Alive? - PullRequest
7 голосов
/ 22 февраля 2012

Я конвертирую свое приложение для использования HTTPS и хотел бы максимально избежать затрат на рукопожатие, оставляя открытым долгоживущее соединение.

Из чтения Интернета и других ответов о переполнении стека выясняется, что NSURLConnection должен прозрачно поддерживать основной сокет открытым, если сервер отвечает Connection: keep-alive и Keep-Alive: timeout = N.

Однако я вижу, что мои соединения остаются открытыми только около 10 секунд. Мой ответ Keep-Alive настроен на гораздо большее, чем это. Я также отправляю Connection: keep-alive в заголовки моего запроса.

Может кто-нибудь пролить свет на это? Я действительно не хочу использовать CFNetwork для достижения этой цели.

Ответы [ 2 ]

2 голосов
/ 12 мая 2012

У вас есть два способа:

Как говорит Тайлер в своем ответе здесь :

Вы можете указать тайм-аут в вашем NSURLRequest объекте.Один из способов сделать это - создать его методом requestWithURL:cachePolicy:timeoutInterval:.(Вы можете передать параметр по умолчанию NSURLRequestUseProtocolCachePolicy cachePolicy, если не хотите беспокоиться об этой части.) Тайм-аут представляет собой значение с плавающей запятой в секундах, как и все интервалы времени в iPhone SDK.

Также убедитесь, что ваш делегат NSURLConnection установлен и отвечает на метод connection:didFailWithError:.Соединение всегда вызывает либо этот метод, либо connectionDidFinishLoading: после завершения соединения.

Или делайте то, что предлагает Крис в своем ответе here :

ASIHTTPRequestимеет метод expirePersistentConnections.Он может делать то, что вы ищете.

Это не замена для NSURLConnection, но не так уж сложно перенести код из NSURLConnection в ASIHTTPRequest.

0 голосов
/ 06 ноября 2014

Проблема 10 с была исправлена ​​в iOS7. У меня была такая же проблема, и я следил за ошибкой. Это исправлено в iOS 6 пункт какой-то версии.

...