【发布时间】:2013-01-21 15:04:00
【问题描述】:
我们目前正在处理我们应用程序中的性能问题,我们认为其中一些问题可能与应用程序和底层 AFNetworking 网络堆栈似乎忽略 HTTP 1.1 上的 keep-alive 的事实有关。
我们从 Apple 获得的信息表明,持久连接分别在 3、6 或 30 秒后被清除,具体取决于 iOS 版本和 WiFi/WWAN 连接,无论服务器端保持活动信息如何。
在监控我们服务器上的连接握手时,我们注意到来自 iOS 设备上的应用程序的 SSL 连接保持打开状态而不是使用 FIN 数据包关闭的奇怪行为。应用发出新请求后,前一个请求的剩余连接将使用 FIN 数据包关闭并创建新连接。
虽然我们知道 iOS 会清除连接以保持低电池消耗,但我们想知道它没有正确终止现有连接并将终止推迟到新请求的开始。
有人可以解释这种行为,并提出解决方案,以避免在常规条件下由 keep-alive 覆盖的连接中进行昂贵的 SSL 握手吗?
【问题讨论】:
-
哪些版本的 iOS 受到影响?
-
哪个 WWDC 会话?顺便说一句,持久连接由 CFNetwork 层处理。据我所知,没有 API 可以改变行为。你可以看看 ASIHttpRequest 是如何支持持久连接的。所以这个问题与 AFNetworking 或 NSURLConnection 无关。而且我想我们很可能无事可做。
-
@Adam - 据我所知,iOS 8 受到影响。这是另一个与 stackoverflow.com/q/29063803/730807 有点相关的问题
标签: ios https nsurlconnection afnetworking keep-alive