現在我正在嘗試爲我的應用程序構建網絡系統。我希望我的網絡操作能夠在網絡故障後重試自己。這就是蘋果正在談論的這種行爲(Designing for Real-World Networks):在哪些錯誤應該重新啓動網絡任務?
對於在用戶的要求下提出請求:
總是試圖建立連接。不要試圖猜測網絡服務是否可用,也不要緩存該確定。 如果連接失敗,請使用SCNetworkReachability API來幫助診斷故障原因。然後:
- 如果由於瞬間錯誤導致連接失敗,請嘗試再次進行連接。
- 如果由於主機不可訪問導致連接失敗,請等待SCNetworkReachability API調用您的註冊回調。當主機再次到達時,您的應用程序應該在沒有用戶干預的情況下自動重試連接嘗試(除非用戶已採取某些操作取消請求,例如關閉瀏覽器窗口或單擊取消按鈕)。
我成功地實現了這個功能,但我有麻煩決定什麼«傳輸錯誤»實際上是。
現在我重試接收NSURLErrorNotConnectedToInternet
,NSURLErrorNetworkConnectionLost
,NSURLErrorInternationalRoamingOff
,NSURLErrorCallIsActive
,NSURLErrorDataNotAllowed
或NSURLErrorTimedOut
和HTTP狀態碼爲500 ... 599範圍後的任務,但我不知道如果這些就足夠了。
我會很樂意聽到更多有經驗的開發人員的建議,他們也使用重試行爲。你如何決定什麼時候重試任務,什麼時候不重要?
在此先感謝!
在Verizon和Sprint,AFAIK上,即使當前的設備也無法在通話過程中訪問數據(除非您使用的是LTE,並且該單元站點上已啓用VoLTE )。 – dgatwood