我的應用程序似乎在蜂窩網絡上工作非常糟糕 - 用戶界面通常具有旋轉器而不是圖像,但並不總是如此。它使用由併發NSOperations驅動的NSURLConnections。它在WIFI上運行良好 - 完全沒有問題。爲什麼我通過蜂窩網絡下載圖像時總是會遇到NSURLConnection超時?
我發現我得到很多NSURLConnection超時,但不知道爲什麼。我如何跟蹤這個問題?
我的應用程序似乎在蜂窩網絡上工作非常糟糕 - 用戶界面通常具有旋轉器而不是圖像,但並不總是如此。它使用由併發NSOperations驅動的NSURLConnections。它在WIFI上運行良好 - 完全沒有問題。爲什麼我通過蜂窩網絡下載圖像時總是會遇到NSURLConnection超時?
我發現我得到很多NSURLConnection超時,但不知道爲什麼。我如何跟蹤這個問題?
爲了追蹤問題,我首先測量併發連接的最大數量,並發現這是始終圍繞55.
最大減少到10(通過設置操作隊列最大值,少超時,但還不夠完善
最大限度地降低了4個 - 甚至更少超時,但仍然有一些
最高設置爲1 - ?!這已經開始工作,正確都能跟得上
有時候,應用程序可以在沒有併發的情況下正常工作(最大== 1),但它仍然失敗了大約一半的時間。
所以我燒了支持事件與蘋果,並得到了最有經驗的工程師建議之一。根據來自他的建議我嘗試了以下內容:
跑了不同運營商的蜂窩網絡(Verizon公司)上的應用程序,它完美地工作。所以,問題不是細胞本身(或iOS),但& T的蜂窩網絡(紐約州和新澤西州都失敗)
從http切換到https,現在它適用於完美無瑕的AT & T搭配完全併發
調查了網絡端點以確定其功能,結果很差(稍後)。我嘗試了一個具有更多功能的不同Web端點,並且使用http解決了原始問題。
我從中學到如下:
有使用iOS5.1或iOS6的
,如果你有AT & T公司的3G這個問題,並沒有什麼區別使用http,請嘗試切換到https
如果端點使用HTTP1.0且不支持'Connection:keep-alive',則每個http req uest正在建立並拆除TCP連接。我相信蜂窩網絡的這種「顛簸」是爲什麼AT會斷開我的一些會話,但當然無法確切知道這一點。
使用支持持久連接的HTTP1.1服務,問題消失。在這種情況下,沒有TCP連接抖動。
一些HTTP1。1服務支持'流水線',就像iOS(使用NSURLRequest設置,HTTPShouldUsePipelining)一樣,如果我可以切換到這個,那麼我的性能應該會大大提高
有一個WWDC2012視頻討論瞭如何提高網絡性能:會話706「網絡最佳做法」
編輯
所以我剝洋蔥這只是變得更離奇!經過進一步討論後,一些網絡人員對CloudFront進行了測試,並確實接受了「連接:保持活動」。我一遍又一遍地試着讓它在昨天工作,但不能。
網絡專家建議我嘗試使用https和低時,它看到它!出於某種原因,當在'3G'上使用'http'時,該標頭標籤被刪除或被忽略。我也用Wifi測試了我的應用程序。在所有情況下,除了ATT/3G之外,'連接'在響應中被返回。