NSURLConnection忽略Keep-Alive超时?

时间:2012-02-22 13:40:42

标签: iphone ios nsurlconnection keep-alive

我将我的应用转换为使用HTTPS,并希望通过保持打开长期连接来尽可能避免握手成本。

从堆栈溢出中读取Web和其他答案,如果服务器响应Connection,则NSURLConnection应该透明地保持底层套接字打开:keep-alive和Keep-Alive:timeout = N.

但是我看到我的连接只保持打开大约10秒钟。我的Keep-Alive响应设置远不止于此。我也在我的请求标题中发送Connection:keep-alive。

有人可以对此有所了解吗?我真的不想使用CFNetwork实现这一目标。

2 个答案:

答案 0 :(得分:2)

您有两种方式:

正如泰勒在答案here中所述:

  

您可以在NSURLRequest对象中指定超时。一种方法   这是通过构建它   requestWithURL:cachePolicy:timeoutInterval:方法。 (您可以   传递默认的NSURLRequestUseProtocolCachePolicy cachePolicy   参数,如果你不想担心那部分。)超时是   以秒为单位的浮点值,基本上是所有时间间隔   在iPhone SDK中。

     

还要确保您的NSURLConnection委托已设置并作出响应   到connection:didFailWithError:方法。一个连接   总是调用此方法或connectionDidFinishLoading:   连接完成。

或者做克里斯在答案中提出的建议here

  

ASIHTTPRequest具有expirePersistentConnections方法。它可能会   你在寻找什么。

     

这不是NSURLConnection的直接替代品,但它也不是   难以将代码从NSURLConnection移植到ASIHTTPRequest。

答案 1 :(得分:0)

10s问题在iOS7中得到修复。我遇到了同样的问题并且正在追踪这个bug。它在iOS 6点固定了一些版本。