2012-02-22 88 views
6

我正在將我的應用轉換爲使用HTTPS,並希望儘可能避免握手成本,方法是保持打開長時間連接。NSURLConnection忽略Keep-Alive超時?

從閱讀web和堆棧溢出的其他答案看來,如果服務器響應Connection:keep-alive和Keep-Alive:timeout = N,NSURLConnection應該透明地保持底層套接字打開。

但是我看到我的連接只能保持大約10秒。我的Keep-Alive響應設置遠不止於此。我也在我的請求標題中發送Connection:keep-alive。

任何人都可以對此有所瞭解嗎?我真的不想要使用CFNetwork來實現這一點。

回答

2

有兩種方式:

正如泰勒指出在他的回答here

您可以在NSURLRequest對象指定超時。做到這一點的一種方法是通過 requestWithURL:cachePolicy:timeoutInterval:方法構建它。 (如果您不想擔心該部分,您可以通過 傳遞默認的NSURLRequestUseProtocolCachePolicy cachePolicy 參數。)暫停時間爲 浮點值(以秒爲單位),基本上iPhone SDK中的所有時間間隔爲 。

此外請確保您的NSURLConnection的代表已設置並響應connection:didFailWithError:方法 。連接 始終調用此方法或connectionDidFinishLoading:連接完成後 。

或者做什麼克里斯建議在他的回答here

ASIHTTPRequest有expirePersistentConnections方法。它可能會做 你在找什麼。

這不是NSURLConnection的直接替換,但它不是太難 難以將代碼從NSURLConnection移植到ASIHTTPRequest。

+2

請不要在沒有正確歸屬的情況下複製他人的文字。我已經編輯了上述內容,但請確保您在將來做到這一點。 – 2012-07-12 18:42:07

0

10s問題在iOS7中得到了修復。我遇到了同樣的問題,並且正在跟蹤錯誤。它在iOS 6中修復了某些版本。

+1

iOS 9.2.1:它不是固定的。 http://stackoverflow.com/questions/25372318/error-domain-nsurlerrordomain-code-1005-the-network-connection-was-lost/25996971#25996971 – jcady 2016-03-02 22:47:59