2016-12-04 41 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

我試圖設置它們,但面臨同樣的問題。 –