我正在製作一個應用程序,其中我想提供的功能之一是測量連接的下載速度。爲了得到這個我使用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;
}
}
我想知道是否有這樣做的更好的方法。一個更好的算法,或更好的類使用。
謝謝。
:
您可以使用從
NSURLConnectionDownloadDelegate
這種方法服務器? –我在我的城市使用大學服務器。 – pedros
速度測試有許多具有瘋狂快速互聯網連接的服務器(要求爲100 Mb/s +)。因此,如果有人位於不同的國家並使用您的應用,則他們的距離會導致數據傳輸時間延長,因此應用會報告不準確的速度。另外,如果一羣人一次做了這些(不確定你的服務器的速度),服務器可能會放慢速度,導致數據傳輸時間更長。我會建議在Google上找到一個文件並下載它。 Google在不同地點擁有不少數據中心。 –