Simulation einer langsamen Internetverbindung


188

Ich weiß, dass dies eine seltsame Frage ist. Da ich normalerweise Anwendungen entwickle, die auf der "Annahme" basieren, dass alle Benutzer eine langsame Internetverbindung haben. Aber glaubt jemand, dass es eine Möglichkeit gibt, eine langsame Internetverbindung programmgesteuert zu simulieren, damit ich "sehen" kann, wie eine Anwendung unter verschiedenen "Verbindungsgeschwindigkeiten" funktioniert?

Ich mache mir keine Sorgen darüber, welche Sprache verwendet wird. Und ich suche keine Codebeispiele oder ähnliches, sondern interessiere mich nur für die Logik dahinter.

Antworten:


109

Wenn Sie Windows ausführen, ist Fiddler ein großartiges Werkzeug. Es verfügt über eine Einstellung zum Simulieren der Modemgeschwindigkeit und für jemanden, der mehr Kontrolle wünscht, über ein Plugin, mit dem jeder Anforderung eine Latenz hinzugefügt werden kann .

Ich bevorzuge die Verwendung eines solchen Tools gegenüber dem Einfügen von Latenzcode in meine Anwendung, da dies eine viel realistischere Simulation darstellt und mich nicht dazu bringt, die tatsächlichen Bits zu entwerfen oder zu codieren. Der beste Code ist Code, den ich nicht schreiben muss.

HINZUGEFÜGT : Dieser Artikel in Pavel Donchevs Blog über Softwaretechnologien zeigt, wie Sie benutzerdefinierte simulierte Geschwindigkeiten erstellen: Begrenzen Sie die Geschwindigkeit Ihrer Internetverbindung mit Fiddler .


6
Hallo, ich habe einen kleinen Leitfaden zur Simulation einer langsamen Internetverbindung geschrieben, der nützlich sein könnte: Developertipoftheday.com/2010/12/… - vollständige Offenlegung - Dies ist mein eigener Blog, aber nur für den Fall, dass es hilft, da ich alle für die Verbreitung bin das gute Wort des Geigers :-)
Alex KeySmith

Das Problem bei diesem Fiddler-Ansatz ist, dass die Latenzsimulation nicht genau ist und auf der falschen Protokollebene ausgeführt wird, sodass Sie den langsamen Start nicht richtig simulieren können.
Sam Saffron

@SamSaffron, Tut mir leid, dass ich einen alten Beitrag wie diesen ausgegraben habe, aber kennen Sie andere Tools, die bei der Simulation langsamer Starts helfen?
Anish Ramaswamy

@ AnishRam beste Wette ist, Dummynet / IPFW zu verwenden, das mit BSD und Familie, Freebsd, OSX usw. geliefert wird. Barkingiguana.com/2009/12/04/…
Sam Saffron

@AnishRam Siehe auch netem linuxfoundation.org/collaborate/workgroups/networking/netem kann mit iproute2 eine Reihe von Bedingungen simulieren.
Philip Rieck

154

Ab Chrome 38 können Sie dies ohne Plugins tun. Klicken Sie einfach F12auf " Element überprüfen" (oder " Hotkey") und dann auf "Gerätemod umschalten". Daraufhin wird Folgendes angezeigt Geben Sie hier die Bildbeschreibung ein:

Geben Sie hier die Bildbeschreibung ein

Neben vielen anderen Funktionen können Sie eine bestimmte Internetverbindung (3G, GPRS) simulieren.

PS für Leute, die versuchen, die Upload-Geschwindigkeit zu begrenzen. Leider ist dies derzeit nicht möglich.

PS2 jetzt musst du nichts mehr umschalten. Das Drosselklappenfeld ist direkt im Netzwerkfeld verfügbar.Geben Sie hier die Bildbeschreibung ein

Beachten Sie, dass Sie beim Klicken auf Keine Drosselung Ihre benutzerdefinierten Drosselungsoptionen erstellen können.

Geben Sie hier die Bildbeschreibung ein


2
Jetzt begrenzt die Drosselung von Chrome Dev Tools sowohl die Download- als auch die Upload-Geschwindigkeit. Es wird jedoch nur für die aktuelle Seite in Chrome eingeschränkt, sodass Sie Ihre Seite nicht in anderen Browsern testen können. Dazu müssen Sie andere Tools wie Fiddler verwenden.
Leonid Vasilev

3
Es ist erwähnenswert, dass WebSockets derzeit nicht auf diese Weise gedrosselt werden: bugs.chromium.org/p/chromium/issues/detail?id=423246
mseddon

Die Upload-Drosselung hat in einigen Versionen von Chrome, einschließlich der neuesten Version (70.0), nicht funktioniert. Es gibt einen Fehlerbericht auf dem Tracker .
Matt

Nach meiner Erfahrung ist die Hauptursache für die Langsamkeit des Webs, dass das flockige DNS von Kabel-ISPs Ad-Server oder CDNs nicht auflösen kann. Manchmal bleibt die gesamte Seite leer, bis der Versuch, sie zu beheben, erfolgreich ist oder eine Zeitüberschreitung auftritt. Kann Chrome dies simulieren?
StackOverthrow

45

1
Der Network Link Conditioner wird von Apple gewartet (ist also stabil und zuverlässig), ABER gilt nur für den Xcode-Simulator.
Ben Wheeler

4
@ BenWheeler Versucht es vor kurzem ist es sicherlich systemweit angewendet worden, sogar localhost
aromero

2
Ich kann bestätigen, dass Network Link Conditioner tatsächlich auf den gesamten Netzwerkstapel angewendet wird.
Fred Vollmer

14

Auf Linux-Rechnern können Sie verwenden wondershaper

apt-get install wondershaper

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

{down} und {up} sind Bandbreiten in kpbs

Wenn Sie beispielsweise die Bandbreite der Schnittstelle eth1 auf 256 kbit / s Uplink und 128 kbit / s Downlink beschränken möchten,

$ sudo wondershaper eth1 256 128

Um das Limit zu löschen,

$ sudo wondershaper clear eth1 

13

Ich habe http://www.netlimiter.com/ verwendet und es funktioniert sehr gut. Begrenzen Sie nicht nur die Geschwindigkeit für einzelne Prozesse, sondern zeigen Sie auch die tatsächlichen Übertragungsraten an.


Die meisten anderen Tools bieten eine Bandbreitensteuerung über künstliche Latenz, was bei Netlimiter nicht der Fall zu sein scheint, was eine gute Sache ist. Letztendlich handelt es sich jedoch um ein kommerzielles Tool (mit einer Testversion), das nur unter Windows verfügbar ist.
Aleksander Stelmaczonek

6

Es gibt TCP-Proxys wie iprelay und Sloppy, die Bandbreitenformen durchführen, um langsame Verbindungen zu simulieren. Sie können auch Bandbreitenformung durchführen und Paketverluste mithilfe von IP-Filtertools wie ipfw und iptables simulieren.


Danke, ich werde einen Blick auf iprelay und Sloppy Joe werfen.

Danke, ipfw funktioniert super. Hier ist eine Kurzanleitung
Eric Nguyen

4

Sie können Dummynet ausprobieren , es kann Warteschlangen- und Bandbreitenbeschränkungen, Verzögerungen, Paketverluste und Mehrwegeffekte simulieren


4

Verwenden Sie einen Web-Debugging-Proxy mit Drosselungsfunktionen wie Charles oder Fiddler .

Sie finden sie im Allgemeinen nützliche Webentwicklung. Der Hauptunterschied besteht darin, dass Charles Shareware ist, während Fiddler kostenlos ist.


Sie führen es als Proxy aus. Der Browser stellt automatisch eine Verbindung her und leitet Anforderungen an Ihre Web-App weiter.
Ben M

Für Fiddler gibt es beide Modi, um innerhalb / außerhalb des Browsers zu arbeiten.
Ken D


2

Verwenden Sie ein Tool wie TCPMon . Es kann eine langsame Verbindung vortäuschen.

Grundsätzlich fordern Sie genau dasselbe an und es leitet nur genau dieselbe Anforderung an den realen Server weiter und verzögert dann die Antwort nur mit der festgelegten Anzahl von Bytes.


2

Sie können NetEm (Network Emulation) als Proxyserver verwenden, um viele Netzwerkeigenschaften (Geschwindigkeit, Verzögerung, Paketverlust usw.) zu emulieren . Es steuert das Netzwerk mithilfe des iproute2- Pakets und ist im Kernel der meisten Linux-Distributionen aktiviert.

Es wird von der tcBefehlszeilenanwendung (aus dem iproute2- Paket) gesteuert , es gibt jedoch auch einige Webschnittstellen-GUIs für NetEm, z. B. PHPnetemGUI2 .

Der Vorteil ist, dass es, wie ich geschrieben habe, nicht nur unterschiedliche Netzwerkgeschwindigkeiten emulieren kann, sondern auch beispielsweise Paketverlust, Duplizierung und / oder Beschädigung, zufällige oder definierte Verzögerung usw., sodass Sie verschiedene Netzwerke mit schlechter Leistung emulieren können.

Für Ihre Anwendung ist es absolut transparent. Sie können das Betriebssystem so konfigurieren, dass es den NetEm-Proxyserver verwendet, sodass alle Verbindungen von diesem Computer über NetEm hergestellt werden. Oder Sie können nur Ihre Anwendung so konfigurieren, dass sie als Proxy verwendet wird.

Ich habe es verwendet, um die Leistung einer Android-App in verschiedenen emulierten Netzwerken mit schlechter Leistung zu testen.


1

Mac OSX hat seit 10.10 eine App namens Murus Firewall , die als GUI für pf fungiert, den Ersatz für ipfw.

Es funktioniert sehr gut für systemweite oder domänenspezifische Drosselung. Ich konnte es nur verwenden, um meine Download-Geschwindigkeit zwischen 300 Kbit / s und 30 Mbit / s zu verschieben und zu testen, wie sich ein Streaming-Videoplayer anpasst.


0

Es gibt auch ein anderes Tool namens WIPFW - http://wipfw.sourceforge.net/

Es ist ein bisschen altmodisch, aber Sie können es verwenden, um eine langsamere Verbindung zu simulieren. Es basiert auf Windows und das Tool ermöglicht es dem Administrator, beispielsweise zu überwachen, wie viel Verkehr der Router von einem bestimmten Computer erhält oder wie viel WWW-Verkehr er weiterleitet.


0

Das Aktualisieren (9 Jahre nachdem es gefragt wurde) als Antwort, die ich suchte, wurde nicht erwähnt:

Firefox verfügt auch über Voreinstellungen für die Drosselung der Verbindungsgeschwindigkeit. Suchen Sie sie auf der Registerkarte Netzwerkmonitor der Entwicklertools. Die Standardeinstellung ist "Keine Drosselung".

Am langsamsten ist GPRS ( Download-Geschwindigkeit: 50 Kbit / s, Upload-Geschwindigkeit: 20 Kbit / s, Mindestlatenz (ms): 500 ), von "gut" und " normal " 2G, 3G und 4G bis zu DSL und WiFi ( Download-Geschwindigkeit: 30 Mbit / s, Upload) Geschwindigkeit: 15 Mbit / s, Mindestlatenz (ms): 2 ).

Mehr in den Dev Tools-Dokumenten .


0

Für Linux kann die folgende Liste von Artikeln hilfreich sein:

Persönlich, während Dummynet gut ist, finde ich NetEm die meisten vielseitig zu sein für meine Anwendungsfälle; Normalerweise interessieren mich eher die Auswirkungen von Verzögerungen als die Bandbreite (dh Probleme mit der WLAN-Verbindung), und es ist sehr einfach, zufälligen Paketverlust / -beschädigung usw. zu emulieren. Außerdem ist es sehr zugänglich und kostenlos (im Gegensatz zur hardwarebasierten Linktropie) ).

Nebenbei bemerkt, für Windows ist Clumsy fantastisch. Ich möchte auch hinzufügen, dass die Browser-Drosselung (in Bezug auf Websites) keine genaue Methode zur Emulation realer Netzwerkprobleme ist (ich denke, "TKK" hat einige der oben genannten Gründe kommentiert).

Hoffe das hilft jemandem!


0

Ein häufiger Fall beim Formen einer einzelnen TCP-Verbindung kann tatsächlich aus zwei Paaren von socatund cpipeauf UNIX-Weise wie folgt zusammengesetzt werden:

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

Dies simuliert eine Verbindung mit einer Bandbreite von ca. 300 kB / s von Ihrem Dienst bei :5000und bis ca. 10 kB / s und wartet auf :5555eingehende Verbindungen. Vorsichtsmaßnahme : Beachten Sie, dass diese pro Verbindung , so dass jede einzelne TCP-Verbindung diesen Betrag erhält.

Erläuterung: Der äußere (links) socatlauscht mit den angegebenen Optionen :5555als Forking-Server. Der erste cpipeBefehl in der SYSTEM:...Option drosselt dann die Daten, die in den Socket socateingegangen sind : 5555 (und kommt aus dem ersten äußeren ) auf höchstens 10 kByte / s. Diese Daten werden dann über einen anderen weitergeleitet, mit socatdem eine Verbindung hergestellt wird localhost:5000(wobei der Dienst, den Sie verlangsamen möchten, abgehört werden soll). Daten von localhost:5000 werden dann in den richtigen cpipeBefehl eingegeben, der sie (mit den angegebenen Werten) auf etwa 300 kB / s drosselt.

Die Option -ngrzu cpipeist wichtig. Es bewirkt, dass cpipe nicht gierig aus seinem Eingabedateideskriptor liest. Andernfalls bleiben möglicherweise Daten in den Puffern hängen, die nicht weitergeleitet werden, und warten auf eine Antwort.

Die Verwendung des gängigeren bufferTools anstelle von cpipeist wahrscheinlich ebenfalls möglich.

(Credits: Dies basiert auf dem "Double-Tee" -Rezept von Christophe Loor aus der socatDokumentation)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.