2012-02-29 19 views
8

Conosco la raggiungibilità è possibile verificare se si è connessi a Internet. Ma c'è un modo per determinare la velocità di quella connessione? Sto provando a calcolare separatamente la velocità di upload e la velocità di download.Determina la velocità su Internet a livello di programmazione

Come determinare la velocità su Internet a livello di programmazione?

+2

Non rispondere alla tua domanda, ma come un a parte, nella mia mente un app dovrebbe essere in grado di supportare qualunque velocità sono disponibili in pratica, come le persone collegano lo stesso dispositivo a più fonti Internet (WiFi a casa o al lavoro, 3G in giro); e anche con una singola sorgente di velocità in pratica può cambiare rapidamente. –

+0

È ora possibile misurare la velocità di Internet o la potenza del wifi. – Imran

risposta

4

Se si utilizza NSURLConnection per afferrare un file di grandi dimensioni (ad esempio, 1 MB o superiore), è possibile utilizzare uno delegate per tenere traccia dell'avanzamento del download intermedio.

In particolare: se si misura la differenza di byte scaricati e la differenza di tempo tra le chiamate al delegato, è possibile calcolare la velocità corrente in byte al secondo (o altra unità di tempo).

+2

NB: Se la tua app tenta di scaricare> 1 MB sulla mia connessione 3G, solo per determinare che è * slooooow *, non sarò felice (il mio gestore potrebbe essere, però). In effetti, sarò violentemente infelice dal fatto che stai inutilmente mangiando il mio scarso limite di dati; ancora di più se lo fai ripetutamente. (Se stai misurando il/i trasferimento/i di dati che l'app ha effettivamente bisogno - ci vorrà un po ', ma ci riuscirò) – Piskvor

+1

Oh, certo. Tuttavia, questo potrebbe fornire una velocità costante dei normali download che si verificano nel corso della normale attività della app, ad esempio. O se l'app è un'app di test di rete, l'utente finale eseguirà questa operazione sapendo che richiederà un file di grandi dimensioni tramite la connessione di rete. Quindi direi che è ancora un approccio utile anche per le connessioni cellulari, se usato in modo intelligente e appropriato ... –

+0

Certamente. – Piskvor

2

passaggio 1: Prendere l'URL del file scaricabile e configurarlo con uno NSURLSession e il suo metodo dataTaskWithUrl.

passaggio 2: Integrare il metodo NSURLSessionDelegate, NSURLSessionDataDelegate nel controller.

passaggio 3: Prendere due CFAbsoluteTime variabili che immagazzinano Startime e assegnare CFAbsoluteTimeGetCurrent() e seconda stopTime in didReceiveData: metodo delegato.

Fase 4: velocità Conte come questo

CFAbsoluteTime elapsedTime = stopTime - startTime; 
    float speedOfConnection = elapsedTime != 0 ? [data length]/(stopTime - startTime)/1024.0/1024.0 : -1; 
+0

istruzioni chiare, grazie! – ArtStyle

Problemi correlati