ios - Swift 网络调用 : Latency keeps increasing and finally request timeout

标签 ios swift api request connection-timeout

我正在开发一个需要大量 API 消耗的 Swift 项目。一切正常,但有时,我收到代码=-1001“请求超时”。调用 API 时出错。为了正确测试它,我使用循环并将其迭代 1000 次,调用相同的 API。

我正在使用公共(public) 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 次,没有失败的情况。

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

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

最佳答案

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

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

关于ios - Swift 网络调用 : Latency keeps increasing and finally request timeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39109348/

相关文章:

ios - 如何将 setEditing 状态转换为编辑/完成按钮的切换模式

ios - 在键盘顶部显示 TextView 时改进动画

ios - ScrollView 不在自动布局中滚动 subview

swift - 在与 Quickblox 的私有(private)聊天中创建对话框问题

r - 通过 RCurl 包将 curl 代码转换为 R?

ios - ios中同一个项目可以有多个架构模式吗

ios - 试图隐藏 UITableView 中的最后一行

swift - 如何在 swift 5 中添加带有一个标签的 TableView 页脚

java - Android studio - 带Retrofit2的外汇汇率API,无法运行应用程序

api - Twitter API - "invalid or expired token"的原因