2016-12-04 26 views
1

我试图让Alamofire参与我的应用程序,并在第一个请求中遇到了以下问题(我设法成功使用了URLSession)。Alamofire:'请求超时'在1秒内不管timoutIntervalForRequest

在执行请求时,在1-2秒内我在日志中看到-1001 The request timed out,尽管我为会话设置了一个相对较长的时间间隔。

这是HttpSession大气压:

class HttpSession { 

    static let instance = HttpSession() 
    let sessionManager: SessionManager? 

    private init() { 
     let conf = URLSessionConfiguration.default 
     conf.timeoutIntervalForRequest = 30 
     sessionManager = Alamofire.SessionManager(configuration: conf) 
    } 
} 

在这里,我提出请求:

HttpSession.instance.sessionManager!.request(url, method: .get, parameters: [:], encoding: JSONEncoding.default, headers: headers).responseJSON { response in 
    switch response.result { 
    case .success: 
     print("YAA!") 
     break 
    case .failure(let error): 
     print(error) 
     break 
    } 
} 

一个奇怪的事情说:当我试图之前和之后进行打印时看到的时间差,这些值的确有30秒不同,但在现实生活中需要1-2秒。我只在模拟器上测试过它。 要打印秒我用下面的代码段的两倍,则该请求之前,并在响应:

let date: Date = Date() 
print(Calendar.current.component(.second, from: date)) 

任何帮助将理解,谢谢。

回答

0

首先,我是错了,因为要求每个时间确实超时一次的间隔有通过。我的大多数测试都是以8秒的时间间隔完成的,而且我没有注意到超时日志出现得更晚。

无论如何,问题是'参数'参数;当放置空字典parameters: [:]时,它总是超时,并且当用nil代替时,它开始按预期工作。我发现它很奇怪,因为在this issue的第一条评论中说明了两者都应该以相同的方式工作,并且无论如何这种类型的错误根本与这个问题无关。

0

如果检查NSURLSessionConfiguration源代码,你会发现这些评论:

/*请求的默认超时。如果在给定的超时值中没有发送数据 ,并且只要发送了数据 就会被重置,这将导致超时。 */public var timeoutIntervalForRequest: NSTimeInterval

/*请求的默认超时。如果在给定的超时时间内无法检索到 资源,则会导致超时。 */
公共变种timeoutIntervalForResource:NSTimeInterval

你需要设置这个值,以及:

conf.timeoutIntervalForResource = 30 
+0

我试图设置它们,但面临同样的问题。 –