3

現在、バックエンド サーバーへの複数の呼び出しを必要とするアプリに取り組んでいます。WiFi の場合、アプリは正常に接続され、データを非常に高速にダウンロードしますが、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 日付];

NSLog(@"START");

NSURLConnection * connection = [NSURLConnection sendSynchronousRequest:request returnedResponse:nil エラー:nil];

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

これは 3G で返されます - 1.47 秒。3G を使用して初めて接続する場合は、初期化する必要があるため、これは正常な場合があります。しかし、ここからが興味深い部分です。この呼び出しを数回繰り返すと、次のように返されます。

1.47秒

2.33秒

1.1秒

2 つの異なる iPhone と 2 つの異なるプロバイダー (T-Mobile と KPN) を使用してこれをテストしました。また、通常使用する NSURLConnection の非同期バージョンを使用してこれを試しましたが、これも同じ結果を返します。

(私が行ったその他のこと: Apple の Reachabilty.h をチェックし、サーバーの URL を ip-number に置き換えて DNS ルックアップを削除し、別のサーバーを使用し、https://www.google.nl/search? q= を使用しました) %i , arc4random() も [NSString alloc]initWithContentOfURL] を試しました.iPhone ブラウザの Safari を使用した場合を除いて、すべて同様の結果が返されました.Safari はすぐに応答しました.)

Androidフォンを使用して同様のこともテストしましたが、500ミリ秒の高速応答が得られました(同じプロバイダーを使用)。

誰かが以前にこれに遭遇しましたか?その場合、この問題をどのように解決しましたか?また、接続に関するこの問題の原因は何ですか?

4

1 に答える 1

0

送信されるデータの量に応じて、3g 接続を介してポスト リクエストがわずかに遅くなるという点で、同様の問題があります。ただし、同期リクエストを送信すると、非同期メソッドよりも高速になります。私が気付いたのは、非同期を使用する 3g 接続を介して OS が接続を閉じる必要があり、ログに「purgeIdleCellConnections: パージする conn が見つかりました」というメッセージが表示され、メソッドの実行に時間がかかるように見えることです。

于 2012-12-24T00:01:29.370 に答える