Im haciendo una aplicación donde una de las características que deseo ofrece es medir la velocidad de descarga de la conexión. Para obtener esto, estoy usando NSURLConnection para comenzar la descarga de un archivo grande, y después de un tiempo cancelar la descarga y hacer el cálculo (Datos descargados/tiempo transcurrido). Mientras que otras aplicaciones como speedtest.net dan una velocidad constante cada vez, la mía fluctúa 2-3 Mbps más o menos.La mejor manera de medir la velocidad de descarga en iPhone usando el toque de cacao
Básicamente lo que estoy haciendo es iniciar el temporizador cuando se llama a la conexión del método: didReceiveResponse: Después de 500 llamadas de la conexión de método: didReceiveData: cancelo la descarga, detengo el temporizador y calculo la velocidad.
Aquí está el código:
- (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;
}
}
me gustaría saber si hay una mejor manera de hacer esto. Un mejor algoritmo o una mejor clase para usar.
Gracias.
¿Está utilizando su propio ¿servidor? –
Estoy usando un servidor de la universidad en mi ciudad. – pedros
Speed Test tiene muchos servidores que tienen conexiones de Internet increíblemente rápidas (se requiere que sean 100 Mb/s +). Por lo tanto, si alguien está en un país diferente y usa su aplicación, su distancia hará que los datos tarden más en transferirse y, por lo tanto, la aplicación informará una velocidad inexacta. Además, si un grupo de personas lo está haciendo a la vez (no está seguro de la velocidad de su servidor), el servidor podría ralentizarse y los datos tardarían más tiempo en transferirse. Yo recomendaría encontrar un archivo en Google y descargarlo. Google tiene bastantes centros de datos en diferentes ubicaciones. –