Alamofire:基于配置的 SessionManager 的超时没有改变

Posted

技术标签:

【中文标题】Alamofire:基于配置的 SessionManager 的超时没有改变【英文标题】:Alamofire: Timeout not changing for SessionManager based on configuration 【发布时间】:2018-10-16 23:18:17 【问题描述】:

这是我在设置 SessionManager 时尝试更改超时长度的代码:

private var defaultSessionManager: Alamofire.SessionManager = 
    let config = URLSessionConfiguration.default
    config.httpMaximumConnectionsPerHost = 10
    config.timeoutIntervalForRequest = TimeInterval(120)
    return Alamofire.SessionManager(configuration: config)
()

但是,请求的超时时间总是 60 秒(这里是 ios 工具 netfox 的截图):

我也尝试将timeoutIntervalForResource 配置为也没有成功。 这不是通过 SessionManager 为请求配置超时长度的正确方法吗?如果是这样,我该怎么做

【问题讨论】:

【参考方案1】:

您需要同时设置timeoutIntervalForRequesttimeoutIntervalForResource 使其按预期工作。这是我目前使用的,

extension SessionManager 

    /// A `SessionManager` to have a request timeout of 2 minutes.
    static let customDelayed: SessionManager = 
        let secondsInOneMinute = 60
        let numberOfMinutesForTimeout = 2
        let timoutInterval = TimeInterval(numberOfMinutesForTimeout * secondsInOneMinute)

        let configuration = URLSessionConfiguration.default
        configuration.timeoutIntervalForRequest = timoutInterval
        configuration.timeoutIntervalForResource = timoutInterval
        return SessionManager(configuration: configuration)
    ()

【讨论】:

你能把我链接到关于这个@Kamran 的文档吗? 我试过了,我所有的网络请求记录工具仍然显示 60 秒(Charles 和 Netfox)超时 我不确定那些网络工具如何记录请求超时。但是,如果您尝试处理超过 60 秒的请求,它将适用于上述配置。对于需要更多时间的请求,您可以通过减少/增加请求超时来进行验证。

以上是关于Alamofire:基于配置的 SessionManager 的超时没有改变的主要内容,如果未能解决你的问题,请参考以下文章

更改 AlamoFire 配置

为啥不建议在 Alamofire 中修改授权标头的会话配置?

Alamofire 会话配置未反映在请求中

Alamofire 的自定义、基于内容的验证器(在 Swift 中)

有没有办法配置 Alamofire 不将结果分派到主队列?

Alamofire 已弃用的代码