Simulazione della connessione Internet lenta


188

So che questa è una specie di domanda strana. Dato che di solito sviluppo applicazioni basate sul "presupposto" che tutti gli utenti dispongano di una connessione Internet lenta. Ma qualcuno pensa che esista un modo per simulare a livello di programmazione una connessione Internet lenta, così posso "vedere" come si comporta un'applicazione con varie "velocità di connessione"?

Non sono preoccupato per quale lingua viene utilizzata. E non sto cercando esempi di codice o altro, sono solo interessato alla logica che sta dietro.

Risposte:


109

Se usi Windows, il violinista è un ottimo strumento. Ha un'impostazione per simulare la velocità del modem e per chi desidera un maggiore controllo ha un plugin per aggiungere latenza a ogni richiesta .

Preferisco usare uno strumento come questo per inserire il codice di latenza nella mia applicazione in quanto è una simulazione molto più realistica, oltre a non farmi progettare o codificare i bit effettivi. Il codice migliore è il codice che non devo scrivere.

AGGIUNTO : Questo articolo sul blog di Pavel Donchev sulle tecnologie software mostra come creare velocità simulate personalizzate: limitare la velocità della connessione Internet con Fiddler .


6
Ciao, ho scritto una piccola guida sulla simulazione di una connessione Internet lenta che potrebbe tornare utile: developertipoftheday.com/2010/12/… - divulgazione completa - questo è il mio blog, ma nel caso in cui sia di aiuto perché sono tutti pronti a diffondere la buona parola del violinista :-)
Alex KeySmith il

Il problema con questo approccio violinista è che la simulazione della latenza non è accurata, funziona al livello di protocollo errato, quindi non è possibile simulare correttamente l'avvio lento.
Sam Saffron,

@SamSaffron, mi dispiace scavare un vecchio post come questo, ma conosci altri strumenti che aiutano nella simulazione di partenze lente?
Anish Ramaswamy il

La migliore scommessa di @AnishRam è usare dummynet / ipfw fornito con bsd e famiglia, freebsd, osx ecc. Barkingiguana.com/2009/12/04/…
Sam Saffron

@AnishRam Vedi anche netem linuxfoundation.org/collaborate/workgroups/networking/netem può simulare un mucchio di condizioni usando iproute2.
Philip Rieck,

154

A partire da Chrome 38 puoi farlo senza plug-in. Fai clic su Ispeziona elemento (o F12tasto di scelta rapida), quindi fai clic su "attiva / disattiva mod dispositivo" inserisci qui la descrizione dell'immaginee vedrai qualcosa del genere:

inserisci qui la descrizione dell'immagine

Tra le molte altre funzionalità ti consente di simulare una specifica connessione Internet (3G, GPRS)

PS per le persone che cercano di limitare la velocità di caricamento. Purtroppo al momento attuale non è possibile.

PS2 ora non è necessario attivare o disattivare nulla. Il pannello di limitazione è disponibile direttamente dal pannello di rete.inserisci qui la descrizione dell'immagine

Notare che facendo clic su Nessuna limitazione è possibile creare le opzioni di limitazione personalizzate.

inserisci qui la descrizione dell'immagine


2
Ora la limitazione di Chrome Dev Tools limita la velocità di download e upload. Ma lo limita solo per la pagina corrente in Chrome, quindi non puoi usarlo per testare la tua pagina in altri browser. Per fare ciò è necessario utilizzare altri strumenti come Fiddler.
Leonid Vasilev,

3
Vale la pena ricordare che attualmente i WebSocket non sono limitati in
mseddon

La limitazione del caricamento non ha funzionato in alcune versioni di Chrome, inclusa l'ultima (70.0). C'è un bug report sul tracker .
Matt,

Nella mia esperienza, la causa principale della lentezza del web è che il DNS instabile degli ISP via cavo non è in grado di risolvere gli ad server o i CDN. A volte l'intera pagina rimane vuota fino a quando il tentativo di risolverli non riesce o scade. Chrome può simularlo?
StackOverthrow

45

1
Network Link Conditioner è gestito da Apple (quindi è stabile e affidabile), MA si applica solo al simulatore di Xcode.
Ben Wheeler,

4
@BenWheeler Ho provato di recente che è stato sicuramente applicato a livello di sistema, anche localhost
aromero,

2
Posso confermare che Network Link Conditioner è effettivamente applicato all'intero stack di rete.
Fred Vollmer,

14

Su macchine Linux puoi usare wondershaper

apt-get install wondershaper

$ sudo wondershaper {interface} {down} {up}

{down} e {up} sono la larghezza di banda in kpbs

Ad esempio, se si desidera limitare la larghezza di banda dell'interfaccia eth1 a uplink a 256 kbps e downlink a 128 kbps,

$ sudo wondershaper eth1 256 128

Per cancellare il limite,

$ sudo wondershaper clear eth1 

13

Stavo usando http://www.netlimiter.com/ e funziona molto bene. Non solo limita la velocità per singoli processi, ma mostra anche le velocità di trasferimento effettive.


La maggior parte degli altri strumenti fornisce il controllo della larghezza di banda tramite latenza artificiale che non sembra essere il caso di netlimiter, il che è una buona cosa. Tuttavia, alla fine è uno strumento commerciale (con una versione di prova) e disponibile solo su Windows.
Aleksander Stelmaczonek,

6

Esistono proxy TCP là fuori, come iprelay e Sloppy, che modellano la larghezza di banda per simulare connessioni lente. Puoi anche eseguire la modellazione della larghezza di banda e simulare la perdita di pacchetti utilizzando strumenti di filtro IP come ipfw e iptables.


Grazie, darò un'occhiata a iprelay e Sloppy Joe.

Grazie, ipfw funziona alla grande. Ecco una breve guida che ho visto utile: barkingiguana.com/2009/12/04/…
Eric Nguyen,

4

Puoi provare Dummynet , simulare i limiti di coda e larghezza di banda, ritardi, perdite di pacchetti ed effetti multipath


4

Utilizzare un proxy di debug Web con funzionalità di limitazione, come Charles o Fiddler .

Li troverai utili per lo sviluppo web in generale. La differenza principale è che Charles è shareware, mentre Fiddler è gratuito.


Lo esegui come proxy. Il browser si connette automaticamente ad esso e inoltra le richieste all'app Web.
Ben M,

Per Fiddler, ha entrambe le modalità per funzionare all'interno / all'esterno del browser.
Ken D,

4

Inoltre, per simulare una connessione lenta su alcuni * nix, puoi provare a usare ipfw . Ulteriori informazioni sono fornite dalla risposta di Ben Newman su questa domanda di Quora


2

Utilizzare uno strumento come TCPMon . Può simulare una connessione lenta.

Fondamentalmente, lo richiedi esattamente la stessa cosa e inoltra esattamente la stessa richiesta al server reale, quindi ritarda la risposta con solo la quantità di byte impostata.


2

È possibile utilizzare NetEm (Network Emulation) come server proxy per emulare molte caratteristiche di rete (velocità, ritardo, perdita di pacchetti, ecc.). Controlla la rete tramite iproute2 pacchetto ed è abilitato nel kernel della maggior parte delle distribuzioni Linux.

È controllato dall'applicazione della tcriga di comando (dal pacchetto iproute2 ), ma ci sono anche alcune GUI di interfaccia web per NetEm, ad esempio PHPnetemGUI2 .

Il vantaggio è che, come ho scritto, può emulare non solo velocità di rete diverse ma anche, ad esempio, perdita di pacchetti, duplicazione e / o corruzione, ritardo casuale o definito, ecc., In modo da poter emulare varie reti con prestazioni scarse.

Per la tua applicazione è assolutamente trasparente, puoi configurare il sistema operativo per usare il server proxy NetEm, quindi tutte le connessioni da quella macchina passeranno attraverso NetEm. Oppure puoi configurare solo la tua applicazione per usarla come proxy.

L'ho usato per testare le prestazioni di un'app Android su varie reti emulate a scarso rendimento.


1

Mac OSX dalla 10.10 ha un'app chiamata Murus Firewall , che funge da GUI per pf, il sostituto di ipfw.

Funziona molto bene per la limitazione del sistema o specifica del dominio. Sono stato solo in grado di usarlo per far scorrere la mia velocità di download tra 300 Kbps e 30 Mbps per testare come si regola un lettore video in streaming.


0

Esiste anche un altro strumento chiamato WIPFW: http://wipfw.sourceforge.net/

È un po 'vecchia scuola, ma puoi usarlo per simulare una connessione più lenta. È basato su Windows e lo strumento consente all'amministratore di monitorare la quantità di traffico che il router riceve da una determinata macchina o, ad esempio, la quantità di traffico WWW che inoltra.


0

L'aggiornamento di questo (9 anni dopo che è stato chiesto) come la risposta che stavo cercando non è stata menzionata:

Firefox ha anche impostazioni predefinite per la limitazione delle velocità di connessione. Trovali nella scheda Network Monitor degli strumenti per sviluppatori. L'impostazione predefinita è "Nessuna limitazione".

Il più lento è GPRS ( velocità di download: 50 Kbps, velocità di upload: 20 Kbps, latenza minima (ms): 500 ), che va da 'buono' e 'normale' 2G, 3G e 4G a DSL e WiFi ( velocità di download: 30 Mbps, upload velocità: 15 Mbps, latenza minima (ms): 2 ).

Altro nei documenti di Dev Tools .


0

Per Linux, potrebbe essere utile il seguente elenco di documenti:

Personalmente, mentre Dummynet è bravo, trovo NetEm il più versatile per i miei casi d'uso; Di solito sono interessato all'effetto dei ritardi, piuttosto che alla larghezza di banda (ad esempio problemi di connessione WiFi), ed è semplicissimo emulare la perdita / corruzione di pacchetti casuali, ecc. È anche molto accessibile e gratuito (a differenza del Linktropy basato su hardware ).

Per inciso, per Windows, Clumsy è fantastico. Vorrei anche aggiungere che (per quanto riguarda i siti Web) la limitazione del browser non è un metodo accurato per emulare problemi di rete nella vita reale (penso che "TKK" abbia commentato alcuni dei motivi per cui sopra).

Spero che questo aiuti qualcuno!


0

Un caso comune di modellare una singola connessione TCP può effettivamente essere assemblato da coppie doppie socate cpipein modo UNIX come questo:

socat TCP-LISTEN:5555,reuseaddr,reuseport,fork SYSTEM:'cpipe -ngr -b 1 -s 10 | socat - "TCP:localhost:5000" | cpipe -ngr -b 1 -s 300'

Questo simula una connessione con larghezza di banda di circa 300 KB / s dal vostro servizio a :5000ed ad a circa 10kB / s ed ascolti su :5555per le connessioni in entrata. Caveat : Si noti che questa per-collegamento , in modo che ogni connessione TCP individuo ottiene questo importo.

Spiegazione: L'esterno (a sinistra) è in socatascolto con le opzioni indicate :5555come server di fork. Il primo cpipecomando SYSTEM:...nell'opzione quindi limita i dati che sono entrati nel socket: 5555 (e esce dal primo, esterno socat) fino a un massimo di 10kByte / s. Tali dati vengono quindi inoltrati utilizzando un altro socatche si collega localhost:5000(dove dovrebbe essere in ascolto il servizio che si desidera rallentare). I dati da localhost:5000 vengono quindi inseriti nel cpipecomando corretto , che (con i valori indicati) lo riduce a circa 300 kB / s.

L'opzione -ngrper cpipeè importante. Fa sì che cpipe legga senza avidità dal suo descrittore di file di input. Altrimenti, potresti rimanere bloccato con i dati nei buffer che non vengono inoltrati e in attesa di una risposta.

Utilizzando lo bufferstrumento più comune invece dicpipe .

(Crediti: si basa sulla ricetta del "doppio t" di Christophe Loor dalla socatdocumentazione)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.