gpt4 book ai didi

ios - 如何解决由坏的 HTTP 持久连接引起的超时问题?

转载 作者:可可西里 更新时间:2023-11-01 03:34:22 24 4
gpt4 key购买 nike

我最近一直在努力解决 HTTP 超时问题。经过一个多月的调查,我很确定这是由错误的 HTTP 持久连接引起的。详情如下:

  1. 这是一款 iOS 应用。
  2. 大多数用户运行的是 iOS 8。
  3. 我正在使用 NSURLConnection
  4. iOS 8 有一个 known keep alive bug但我的是另一个问题。更具体地说,该错误会导致 NSURLErrorNetworkConnectionLost,但我的错误是 NSURLErrorTimedOut。但是,我不确定我的问题是否是由 iOS 8 的另一个错误引起的。
  5. 我的问题的行为:使用一段时间后——在成功发送一些 HTTP 请求并收到相应的响应之后——一个请求会导致 NSURLErrorTimedOut,然后所有后续(离最后一个重用持久连接)请求会导致 NSURLErrorTimedOut
  6. 一些解决方法:
    1. 终止并重新启动该应用。
    2. 关闭 iPhone 上的 WiFi 连接以强制使用 3G/4G。
    3. 打开空气模式,然后将其关闭。
  7. 我的分析:从行为来看,问题似乎是由坏掉的持久连接引起的。所有后续请求都继续使用此持久连接,因此所有请求都失败并返回 NSURLErrorTimedOut。从解决方法中,我们可以看到所有方法都有效,因为它们会导致损坏的持久连接被丢弃并创建新的持久连接。

我的问题:

  1. 还有其他人遇到过这个问题吗?
  2. 这是 iOS 8 的已知错误吗?
  3. 是否由服务器的某些非常规配置引起?我不控制服务器,但我知道他们使用 nginx 1.6.1,他们的工程师正在和我一起调查这个问题。我应该向他们询问哪些信息?
  4. 有什么方法可以强制 NSURLConnection 不再重用当前的持久连接,而是创建一个新的连接,以便在我的代码中检测到它后解决这个问题?

更新:

我通过使用 CFNetwork 并直接控制 Connection header 成功地缓解了 iOS 8 上的这个问题。然而,这个问题似乎在 iOS 9 上变得更糟。

由于我希望 Apple 会在 iOS 9 上修复它的希望破灭了,所以我终于发射了一个雷达:http://www.openradar.me/22770738 .

如果您也遇到此问题,请复制我的雷达,或者更好的是,如果您有更可靠的可重现样本,请发射您自己的雷达。

最佳答案

经过 2 周的研究,我可以给出问题 3 和 4 的答案:

  1. nginx的持久连接超时在服务器上设置为5s,应该不是这个原因。服务器工程师发现那些超时的请求实际上是正常接收和响应的。所以这更有可能是客户端问题。因为我有一个 minimal reproducible code排除我的代码的原因,原因应该在 iOS 中。
  2. 我发现的唯一方法是使用 CFNetwork。更高级别的 API,例如 NSURLConnectionNSURLSessionConnection header 将被系统覆盖。

关于ios - 如何解决由坏的 HTTP 持久连接引起的超时问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28904723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com