Come posso simulare una cattiva connessione Internet a scopo di test?


105

Sto sviluppando un gioco multiplayer online. Funziona bene quando lo collaudo sulla rete locale, ma prima di rilasciarlo vorrei testare come l'esperienza utente funziona per qualcuno che non ha una buona connessione con il server. Come posso simulare una cattiva connessione a Internet con latenza elevata, larghezza di banda ridotta, jitter e perdita di pacchetti occasionale in un ambiente locale?


69
Invialo a me per il test! Le connessioni nel mio paese sono orribili per impostazione predefinita.
Stephan,

7
Un obiettivo encomiabile. Vorrei che gli studi pubblicati facessero lo stesso. Epic Games, ti sto guardando.
Gusdor,

7
Trova un amico nelle vicinanze che utilizza Comcast ...
WernerCD

12
La simulazione di una cattiva connessione Internet contiene le risposte correnti e altro ancora.
MichaelHouse

2
Ho pensato subito a questa altra recente domanda SE: superuser.com/questions/637594/…
Patrick M

Risposte:


63

Penso che Dummynet sia quello che stai cercando. Dummynet è uno strumento di emulazione di rete in grado di simulare limiti di larghezza di banda, ritardi, perdite di pacchetti e molti altri. Puoi facilmente scegliere quale traffico vuoi intercettare e configurare le limitazioni, ad esempio per limitare tutto il traffico TCP in entrata a 2Mbit / s che fai

ipfw add pipe 2 in proto tcp
ipfw pipe 2 config bw 2Mbit/s

Si vede che la selezione del traffico viene effettuata dal firewall ipfw noto e le pipe forniscono le funzionalità di limitazione.

È disponibile per FreeBSD, Linux e Windows.


funziona con l'adattatore di loopback di Windows?
Andriy Tylychko,

per rispondere alla mia domanda, no, non funziona per me su Windows 8.1, anche dopo aver disabilitato il rinforzo del driver firmato
Andriy Tylychko,

@AndyT Hai trovato qualcosa che funziona con il loopback? Trovare qualcosa che fa packloss E funziona con il loopback sembra difficile.
AaronLS

@AaronLS: vedi un'altra risposta qui: gamedev.stackexchange.com/a/100779/4731
Andriy Tylychko

33

Condizionatore di collegamento di rete

Se sei su un Mac, puoi utilizzare Network Link Conditioner.

Riquadro preferenze condizionatore collegamento di rete

Puoi simulare vari casi di cattive connessioni Internet, inclusi Edge e 3G.

Inoltre, puoi creare i tuoi profili con le tue impostazioni:

Profili personalizzati di Network Link Conditioner

È un download gratuito in Xcode (vai su Xcode → Apri strumento per sviluppatori → Altri strumenti per sviluppatori ... e scarica Hardware IO Tools per Xcode ).


Mi piacciono questi strumenti, ma ho bisogno di qualcosa che posso usare per i test automatizzati. Qualcuno sa se esiste un'interfaccia a riga di comando per questo?
Erik B,

15

Se sei su Linux puoi usare netem per simulare tutti i possibili problemi con reti come alta latenza, bassa larghezza di banda, perdita di pacchetti e molti altri.

C'è un'opzione per Windows chiamata NetLimiter ma non l'ho usata, quindi non posso garantirlo.

Ho appena trovato un'app per Mac chiamata SlowlyApp .


1
-1 Come con le altre risposte. Questo è solo link. Aggiorna la risposta per includere le descrizioni di ciò che le applicazioni fanno e come lo fanno.
MichaelHouse

8
@ Byte56: ciò che fanno queste app è simulare una connessione di rete lenta e / o inaffidabile, proprio come fa la domanda. Sono abbastanza sicuro di come lo facciano al di fuori dell'ambito di questo sito. Direi che questa è una risposta perfettamente valida alla domanda posta; se c'è un problema, è nella domanda, non nelle risposte.
Ilmari Karonen,

1
Tecnicamente, la domanda si pone "Come posso simulare una cattiva connessione a Internet". Non richiede applicazioni per farlo. Ma sì, penso che questa domanda non rientri nell'ambito di questo sito.
MichaelHouse


7

Come posso simulare una cattiva connessione a Internet con latenza elevata, larghezza di banda ridotta, jitter e perdita di pacchetti occasionale in un ambiente locale?

Se sei su Windows, puoi provare l' emulatore di connessione SoftPerfect . È fondamentalmente un driver che si inietta tra l'applicazione e il livello di rete (simile a Wireshark / WinPCAP) per la scheda NIC selezionata e può simulare larghezza di banda, latenza, perdita di pacchetti limitate e altre cose. L'interfaccia utente è semplice e diretta.

È un prodotto commerciale, ma la versione di prova ti consente di fare esplosioni di "interferenza" di 30 secondi che dovrebbero essere abbastanza buone da poter giudicare se questo strumento fa quello che vuoi.

Un'altra opzione multipiattaforma è DummyNet , che si comporta in modo simile (tramite ipfw) ma è un po 'meno facile da usare.

Vorrei testare come l'esperienza utente funziona per qualcuno che non ha una buona connessione con il server.

Penso che questa parte della domanda possa essere ribadita come "come gestisco la latenza di rete nella mia applicazione?" Una tecnica comunemente usata ed efficace è Dead Reckoning . L'articolo collegato lo spiega meglio di me, ma l'idea di base è che i tuoi clienti in qualche modo "simulano" dove dovrebbe essere ogni entità e cosa dovrebbe fare con un algoritmo. Ogni volta che un'entità si discosta da questo algoritmo (ovvero input del giocatore, evento sul lato server, ecc.), Invia un aggiornamento a ciascun client.


5

Non lo uso da un po ', ma ho usato Charles per testarlo. Si tratta di un'applicazione con vari strumenti di diagnostica di rete, inclusa la simulazione dei problemi menzionati: "una cattiva connessione a Internet con latenza elevata, larghezza di banda ridotta, jitter e perdita di pacchetti occasionale"


1
A prima vista sembra che Charles sia una specie di proxy HTTP, quindi non può modellare il traffico TCP o UDP. Mi sto perdendo qualcosa?
Vbo,

e ha anche +5, wft?
Marian Paździoch,

er non sono sicuro di cosa significhi "modellare il traffico TCP o UDP", ma ho usato questo strumento proprio per quello che l'OP ha chiesto, simulando una cattiva connessione a Internet.
jhocking

1
@jhocking Vuol dire che funziona solo per il traffico HTTP. Molti giochi in tempo reale utilizzano TCP o UDP.
AaronLS

0

Se sei esperto con Fiddler e sei interessato solo a HTTP / 1, puoi scriverlo.

Fiddler non supporta HTTP / 2, l'intercettazione con esso causerà il downgrade di tutto il traffico HTTP a HTTP / 1.


Interessante. Potete fornire maggiori dettagli? Forse qualche sceneggiatura di esempio?
Philipp

@Philipp questa risposta ( stackoverflow.com/a/47401557/442351 ) dà un esempio.
BanksySan

Supporta solo http? Neanche i websocket? Quindi non penso che abbia molto utilità nello sviluppo del gioco. Se ti preoccupi della latenza, non dovresti utilizzare http in primo luogo. Ma grazie per averlo menzionato comunque.
Philipp

@Philipp supporta WebSocket, solo HTTP / 2 caldo. Tuttavia, dovresti guardare HTTP / 2, non è niente come HTTP / 1, niente più blocchi head-of-line, niente più handshake multipli, niente più header duplicati e / o cookie.
BanksySan
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.