私が提供したい機能の1つが、接続のダウンロード速度を測定することです。これを取得するには、NSURLConnectionを使用して大きなファイルのダウンロードを開始し、しばらくしてからダウンロードをキャンセルして計算(データのダウンロード/時間の経過)を行います。 speedtest.netのような他のアプリでは毎回一定の速度が得られますが、私の場合は2〜3 Mbps程度の変動があります。iPhoneでココアタッチを使ってダウンロード速度を測定する最善の方法
基本的には、メソッド接続:didReceiveResponse:が呼び出されたときにタイマーを開始します。メソッド接続の500コール後:didReceiveData:私は、ダウンロードをキャンセルし、タイマーを停止し、速度を計算します。ここで
はコードです:
- (IBAction)startSpeedTest:(id)sender
{
limit = 0;
NSURLRequest *testRequest = [NSURLRequest requestWithURL:self.selectedServer cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60];
NSURLConnection *testConnection = [NSURLConnection connectionWithRequest:testRequest delegate:self];
if(testConnection) {
self.downloadData = [[NSMutableData alloc] init];
} else {
NSLog(@"Failled to connect");
}
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
self.startTime = [NSDate date];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[self.downloadData appendData:data];
if (limit++ == 500) {
[self.connection cancel];
NSDate *stop = [NSDate date];
[self calculateSpeedWithTime:[stop timeIntervalSinceDate:self.startTime]];
self.connection = nil;
self.downloadData = nil;
}
}
私はこれを行うには良い方法があるかどうかを知りたいです。より良いアルゴリズム、またはより良いクラスを使用する。
ありがとうございました。
あなた自身を使用していますサーバ? –
私の街の大学のサーバーを使用しています。 – pedros
スピードテストには、非常に高速なインターネット接続が必要なサーバーが多数あります(100 Mb/s +にする必要があります)。だから誰かが別の国にいて、あなたのアプリを使っているならば、その距離はデータの転送に時間がかかるため、アプリは不正確なスピードを報告します。また、一度にたくさんの人が(サーバーの速度がわからない)サーバーが遅くなると、データの転送に時間がかかることがあります。 Googleでファイルを探してダウンロードすることをおすすめします。 Googleはさまざまな場所にかなりのデータセンターを持っています。 –