2012-02-22 162 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