【问题标题】:Swift Network Calling: Latency keeps increasing and finally request timeoutSwift 网络调用:延迟不断增加,最终请求超时
【发布时间】:2016-12-30 18:21:23
【问题描述】:

我正在开发一个需要大量使用 API 的 Swift 项目。一切正常,但有时,我得到 Code=-1001 "The request timed out"。调用 API 时出错。为了正确测试它,我使用循环并迭代它 1000 次,调用相同的 API。

我正在使用公共 API。 API 是

let apiString = "https://oc-index.library.ubc.ca"

我的循环是

for i in 0 ..< 1000 {
    Alamofire.request(.POST, apiString).responseJSON { response in
        print(response.debugDescription)

        if response.result.isFailure {
            print("Failure")
        }
    }
}

现在在检查打印响应时,我看到每个新的 api 响应的延迟都会增加,达到 60.14 秒,最后是请求超时。第一次调用 API 时延迟为 2.225 秒,在日志中的时间线中,最后一次成功 API 的延迟为 60.14 秒。

API 在循环中第一次被命中时的时间线(当 i = 1 时)。

[Timeline]: Timeline: { "Request Start Time": 493671593.424, "Initial Response Time": 493671595.649, "Request Completed Time": 493671595.684, "Serialization Completed Time": 493671595.688, "Latency": 2.225 secs, "Request Duration": 2.260 secs, "Serialization Duration": 0.004 secs, "Total Duration": 2.264 secs }

上一次成功 API 的时间线

[Timeline]: Timeline: { "Request Start Time": 493671593.859, "Initial Response Time": 493671621.500, "Request Completed Time": 493671621.513, "Serialization Completed Time": 493671621.519, "Latency": 60.140 secs, "Request Duration": 60.140 secs, "Serialization Duration": 0.007 secs, "Total Duration": 60.147 secs }

但是如果我同步执行它,就不会出现这种超时的情况。 API被调用1000次,没有出现Failure的情况。

我不明白为什么当我多次异步访问 API 时延迟会以这种方式增加。我知道可以通过增加超时时间来避免错误。但我想知道它首先发生的原因。

任何帮助将不胜感激。

【问题讨论】:

    标签: ios swift api request connection-timeout


    【解决方案1】:

    网络堆栈将只允许同时执行一定数量的请求,并会阻止新请求的发布,直到一些请求完成。因此,您的 1000 个请求会尽快启动,但后面的请求需要等待前面的请求完成才能真正连接,因此时间会增加。

    有关如何处理这种情况的一些详细信息,请参阅此线程: NSURLSession concurrent requests with Alamofire

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-22
      • 1970-01-01
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 2019-08-13
      相关资源
      最近更新 更多