現在、バックエンド サーバーへの複数の呼び出しを必要とするアプリに取り組んでいます。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ミリ秒の高速応答が得られました(同じプロバイダーを使用)。
誰かが以前にこれに遭遇しましたか?その場合、この問題をどのように解決しましたか?また、接続に関するこの問題の原因は何ですか?