Wie kann ich eine schlechte Internetverbindung zu Testzwecken simulieren?


105

Ich entwickle ein Online-Multiplayer-Spiel. Es funktioniert gut, wenn ich es im lokalen Netzwerk teste, aber bevor ich es freigebe, möchte ich testen, wie die Benutzererfahrung für jemanden funktioniert, der keine so gute Verbindung zum Server hat. Wie kann ich eine schlechte Internetverbindung mit hoher Latenz, geringer Bandbreite, Jitter und gelegentlichem Paketverlust in einer lokalen Umgebung simulieren?


69
Schicken Sie es mir zum Testen! Die Verbindungen in meinem Land sind standardmäßig schrecklich.
Stephan

7
Ein lobenswertes Ziel. Ich wünschte, veröffentlichte Studios würden dasselbe tun. Epic Games, ich sehe dich an.
Gusdor

7
Finde einen Freund in der Nähe, der Comcast nutzt ...
WernerCD

12
Die Simulation einer schlechten Internetverbindung enthält die aktuellen Antworten und mehr.
MichaelHouse

2
Ich dachte sofort an diese andere aktuelle SE-Frage: superuser.com/questions/637594/…
Patrick M

Antworten:


63

Ich denke, Dummynet ist das, wonach Sie suchen. Dummynet ist ein Netzwerkemulationstool, mit dem Bandbreitenbeschränkungen, Verzögerungen, Paketverluste und vieles mehr simuliert werden können. Sie können einfach auswählen, welchen Datenverkehr Sie abfangen möchten, und die Einschränkungen konfigurieren, z. B. um den gesamten eingehenden TCP-Datenverkehr auf 2 MBit / s zu beschränken

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

Sie sehen, dass die Auswahl des Datenverkehrs von der bekannten ipfw-Firewall vorgenommen wird und die Pipes die Einschränkungsfunktionen bereitstellen.

Es ist für FreeBSD, Linux und Windows verfügbar.


funktioniert es mit Windows Loopback Adapter?
Andriy Tylychko

um meine eigene
frage

@AndyT Hast du etwas gefunden, das mit Loopback funktioniert? Es scheint schwierig zu sein, etwas zu finden, das Packloss AND unterstützt.
AaronLS

@ AaronLS: Bitte sehen Sie eine andere Antwort hier: gamedev.stackexchange.com/a/100779/4731
Andriy Tylychko

33

Network Link Conditioner

Wenn Sie einen Mac verwenden, können Sie Network Link Conditioner verwenden.

Voreinstellungsbereich für Network Link Conditioner

Sie können verschiedene Fälle von schlechten Internetverbindungen simulieren, einschließlich Edge und 3G.

Darüber hinaus können Sie Ihre eigenen Profile mit Ihren eigenen Einstellungen erstellen:

Benutzerdefinierte Profile für Network Link Conditioner

Es ist ein kostenloser Download in Xcode (gehen Sie zu Xcode → Entwickler-Tool öffnen → Weitere Entwickler-Tools… und laden Sie die Hardware-IO-Tools für Xcode herunter ).


Ich mag diese Tools, aber ich brauche etwas, das ich für automatisierte Tests verwenden kann. Weiß jemand, ob es eine Befehlszeilenschnittstelle dafür gibt?
Erik B

15

Wenn Sie unter Linux arbeiten, können Sie mit netem alle möglichen Probleme mit dem Netzwerk simulieren, z. B. hohe Latenz, geringe Bandbreite, Paketverluste und viele andere.

Es gibt eine Option für Windows mit dem Namen NetLimiter, aber ich habe sie nicht verwendet und kann daher nicht dafür bürgen.

Habe gerade eine Mac App namens SlowlyApp gefunden .


1
-1 Wie bei den anderen Antworten. Dies sind nur Links. Bitte aktualisieren Sie die Antwort, um eine Beschreibung der Funktionen und Vorgehensweisen der Anwendungen zu erhalten.
MichaelHouse

8
@Byte56: Diese Apps simulieren eine langsame und / oder unzuverlässige Netzwerkverbindung, so wie es die Frage verlangt. Ich bin mir ziemlich sicher, wie sie das machen, liegt außerhalb des Rahmens dieser Website. Ich würde sagen, das ist eine sehr gute Antwort auf die gestellte Frage. Wenn es ein Problem gibt, steht es in der Frage, nicht in den Antworten.
Ilmari Karonen

1
In technischer Hinsicht lautet die Frage "Wie kann ich eine schlechte Internetverbindung simulieren?". Es fordert keine Anwendungen auf, dies zu tun. Aber ja, ich denke, diese Frage liegt außerhalb des Geltungsbereichs dieser Website.
MichaelHouse


7

Wie kann ich eine schlechte Internetverbindung mit hoher Latenz, geringer Bandbreite, Jitter und gelegentlichem Paketverlust in einer lokalen Umgebung simulieren?

Unter Windows können Sie den SoftPerfect Connection Emulator ausprobieren . Dies ist im Grunde ein Treiber, der sich zwischen Ihrer Anwendung und der Netzwerkschicht (ähnlich wie Wireshark / WinPCAP) für die ausgewählte Netzwerkkarte einfügt und eine begrenzte Bandbreite, Latenz, Paketverlust und andere Dinge simulieren kann. Die Benutzeroberfläche ist einfach und unkompliziert.

Es ist ein kommerzielles Produkt, aber mit der Testversion können Sie 30 Sekunden lang "Interferenzen" auslösen, die ausreichen sollten, um zu beurteilen, ob dieses Tool das tut, was Sie wollen.

Eine weitere plattformübergreifende Option ist DummyNet , das sich ähnlich verhält (über ipfw), jedoch etwas weniger benutzerfreundlich ist.

Ich möchte testen, wie die Benutzererfahrung für jemanden funktioniert, der keine so gute Verbindung zum Server hat.

Ich denke, dieser Teil der Frage könnte als "Wie gehe ich mit der Netzwerklatenz in meiner Anwendung um?" Eine häufig angewandte und wirksame Technik ist das Dead Reckoning . Der verlinkte Artikel erklärt es besser als ich, aber die Grundidee ist, dass Ihre Kunden durch einen Algorithmus simulieren, wo sich jede Entität befinden sollte und was sie tun sollte. Wenn eine Entität von diesem Algorithmus abweicht (z. B. Spielereingabe, serverseitiges Ereignis usw.), sendet sie ein Update an jeden Client.


5

Ich habe es eine Weile nicht mehr benutzt, aber ich habe Charles benutzt, um das zu testen. Es handelt sich um eine Anwendung mit verschiedenen Netzwerkdiagnosetools, einschließlich der Simulation der von Ihnen genannten Probleme: "Eine schlechte Internetverbindung mit hoher Latenz, geringer Bandbreite, Jitter und gelegentlichem Paketverlust".


1
Auf den ersten Blick sieht es so aus, als wäre Charles eine Art HTTP-Proxy, sodass er keinen reinen TCP- oder UDP-Verkehr beeinflussen kann. Vermisse ich etwas?
vbo

und es hat sogar +5, wft?
Marian Paździoch

äh Ich bin nicht sicher, was "einfachen TCP- oder UDP-Datenverkehr formen" bedeutet, aber ich habe dieses Tool genau für das verwendet, wonach das OP gefragt hat, um eine schlechte Internetverbindung zu simulieren.
jhocking

1
@jhocking Er bedeutet, dass es nur für HTTP-Verkehr funktioniert. Viele Echtzeitspiele verwenden TCP oder UDP.
AaronLS

0

Wenn Sie mit Fiddler vertraut sind und sich nur für HTTP / 1 interessieren, können Sie dieses Skript erstellen.

Fiddler unterstützt HTTP / 2 nicht. Wird HTTP / 2 abgefangen, wird der gesamte HTTP-Datenverkehr auf HTTP / 1 heruntergestuft.


Interessant. Können Sie weitere Details angeben? Vielleicht ein Beispielskript?
Philipp

@Philipp Diese Antwort ( stackoverflow.com/a/47401557/442351 ) gibt ein Beispiel.
BanksySan

Es unterstützt nur http? Nicht einmal Websockets? Dann denke ich, hat es nicht viel Sinn in der Spieleentwicklung. Wenn Sie sich über die Latenz Gedanken machen, würden Sie http nicht in erster Linie verwenden. Aber danke, dass du es trotzdem erwähnt hast.
Philipp

@Philipp es unterstützt WebSockets, nur heißes HTTP / 2. Sie sollten sich HTTP / 2 ansehen, es ist nichts wie HTTP / 1, kein Head-of-Line-Blocking mehr, keine mehrfachen Handshakes, keine doppelten Header und / oder Cookies mehr.
BanksySan
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.