我将我的应用转换为使用HTTPS,并希望通过保持打开长期连接来尽可能避免握手成本。
从堆栈溢出中读取Web和其他答案,如果服务器响应Connection,则NSURLConnection应该透明地保持底层套接字打开:keep-alive和Keep-Alive:timeout = N.
但是我看到我的连接只保持打开大约10秒钟。我的Keep-Alive响应设置远不止于此。我也在我的请求标题中发送Connection:keep-alive。
有人可以对此有所了解吗?我真的不想使用CFNetwork实现这一目标。
答案 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点固定了一些版本。