2012-11-05 41 views
3

目前我正在開發一個應用程序,需要多次調用後端服務器。 當在WiFi上的應用程序連接良好,並非常快速地下載數據,但是當3G上的連接看起來有點不穩定並且非常慢。iOS - 連接到後端API服務器時發生3G連接緩慢問題

所以我做了一些非常簡單的測試案例(你在下面找到)。而且NSURLConnection似乎沒有以相同的響應速度獲取數據。

(請注意,我已刪除我連接真實服務器的URL)

測試用例:

的服務器上放置下面的PHP腳本:

<?php echo 'hello world' ?> 

搶下iPhone,關閉WiFi並確保它有適當的3G連接。

用下面的Objective-C代碼連接到服務器:

NSURL * url = [NSURL URLWithString:@" http://someserver.com/test.php "];

NSURLRequest * request = [NSURLRequest requestWithURL:url];

NSDate * startDate = [NSDate date];

NSLog(@"START");

NSURLConnection * connection = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

NSLog(@"%3.2f", -[startDate timeIntervalSinceNow]);

這將返回在3G - 1.47秒。所以這可能是正常的,如果你第一次使用3G連接,因爲它需要初始化。但現在來了有趣的部分。若您重複調用幾次它返回下列信息:

1.47秒

2.33秒

1.1秒

我有這個使用兩種不同的iPhone和兩個不同的供應商進行測試:T-Mobile公司和KPN。我也嘗試使用NSURLConnection的異步版本,我通常使用它,但是這也會返回相同的結果。 (其他事情我也做過了:檢查Apple的Reachabilty.h,通過ip-number取代服務器url,使用其他服務器並使用了arc4random(),並嘗試使用[NSString alloc] initWithContentOfURL]。所有返回類似的結果,除了當使用iPhone瀏覽器:Safari,它立即作出響應。)

我也測試了類似的東西使用Android手機,但後來我得到一個快速響應500毫秒相同的供應商)。

以前有人遇到過這個嗎?如果是這樣,你是如何解決這個問題的,以及是什麼原因導致連接問題?

+0

@ H2CO3我已經這樣做了:「我也嘗試過使用NSURLConnection的異步版本,我通常使用它,但是這也會返回相同的結果。」 – battleex

回答

0

我有一個類似的問題,自然在3g連接上,根據發送的數據量,發送請求會稍微慢一些。但是,如果我發送的同步請求比異步方法更快。我注意到的是,通過使用異步的3g連接,操作系統必須關閉連接,並且您可能會注意到在日誌「purgeIdleCellConnections:找到一個清除連接」似乎爲方法執行增加了一些時間。