Im fare un'app in cui una delle funzionalità che voglio offrire è misurare la velocità di download della connessione. Per ottenere questo utilizzo NSURLConnection per avviare il download di un file di grandi dimensioni, e dopo un po 'di tempo annullare il download ed effettuare il calcolo (Dati scaricati/tempo trascorso). Mentre altre app come speedtest.net danno sempre una velocità costante, la mia fluttua di 2-3 Mbps in più o in meno.Il modo migliore per misurare la velocità di download su iPhone utilizzando il cacao touch
Fondamentalmente quello che sto facendo è, avviare il timer quando la connessione del metodo: didReceiveResponse: viene chiamata. Dopo 500 chiamata del metodo di connessione: didReceiveData: Annullo il download, interrompi il timer e calcola la velocità.
Ecco il codice:
- (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;
}
}
Vorrei sapere se c'è un modo migliore di fare questo. Un algoritmo migliore o una classe migliore da usare.
Grazie.
Si sta utilizzando il proprio server? –
Sto usando un server universitario nella mia città. – pedros
Speed Test ha molti server che hanno connessioni Internet follemente veloci (richieste per essere 100 Mb/s +). Pertanto, se qualcuno si trova in un paese diverso e utilizza la tua app, la distanza richiederà più tempo per il trasferimento dei dati, pertanto l'app segnalerà una velocità imprecisa. Inoltre, se un gruppo di persone lo sta eseguendo contemporaneamente (non è sicuro della velocità del server), il server potrebbe rallentare causando il trasferimento dei dati più lungo. Consiglierei di trovare un file su Google e di scaricarlo. Google ha diversi data center in diverse posizioni. –