Swift网络调用:延迟不断增加,最终请求超时

问题描述 投票:0回答:1

我正在开发一个 Swift 项目,需要消耗大量 API。一切工作正常,但有时,我在调用 API 时遇到此错误:

Code=-1001“请求超时。”

为了正确测试它,我使用循环并迭代 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 时)。

[时间线]:时间线:{“请求开始时间”:493671593.424,“初始响应时间”:493671595.649,“请求完成时间”:493671595.684,“序列化完成时间”:493671595.688,“延迟”:2.225秒,“请求”持续时间“:2.260秒,“序列化持续时间”:0.004秒,“总持续时间”:2.264秒}

上次成功 API 的时间线

[时间线]: 时间线: { "请求开始时间": 493671593.859, "初始响应时间": 493671621.500, "请求完成时间": 493671621.513, "序列化完成时间": 493671621.519, "延迟": 60.140 秒, "请求持续时间“:60.140秒,“序列化持续时间”:0.007秒,“总持续时间”:60.147秒}

但是如果我同步执行的话,就不会出现这样的超时情况。 API调用1000次,无一例失败。

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

如有任何帮助,我们将不胜感激。

ios swift request connection-timeout
1个回答
1
投票

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

有关如何处理这种情况的一些详细信息,请参阅此线程: NSURLSession 与 Alamofire 的并发请求

© www.soinside.com 2019 - 2024. All rights reserved.