2016-08-23 73 views
1

我正在開發一個Swift項目,它需要大量的API消耗。一切正常,但有時,我得到Code = -1001「請求超時。」調用API時出錯。爲了正確測試它,我使用循環並迭代1000次,調用相同的API。Swift網絡調用:延遲不斷增加,最後請求超時

我正在使用公共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異步。我知道這個錯誤可以通過增加超時時間來避免。但我想知道它爲什麼在第一時間發生的原因。

任何幫助,將不勝感激。

回答

1

網絡棧將只允許一定數量的請求同時執行,並會阻止發出新的請求,直到一些完成。因此,您的1000個請求將盡快啓動,但後面的請求需要等待前端完成,才能實際連接,因此時間越來越長。

看到這個線程如何處理這種情況的一些細節: NSURLSession concurrent requests with Alamofire

+0

還好理解並感謝您的答覆。 –