Jak mogę zasymulować złe połączenie internetowe do celów testowych?

105

Tworzę internetową grę wieloosobową. Działa dobrze, kiedy testuję go w sieci lokalnej, ale zanim go wypuszczę, chciałbym przetestować, jak działa środowisko użytkownika dla kogoś, kto nie ma tak dobrego połączenia z serwerem. Jak mogę zasymulować złe połączenie internetowe przy dużym opóźnieniu, niskiej przepustowości, fluktuacji i sporadycznej utracie pakietów w środowisku lokalnym?

Philipp
źródło
69
Wyślij mi to do testowania! Połączenia w moim kraju są domyślnie okropne.
Stephan
7
Godny pochwały cel. Chciałbym, żeby opublikowane studia zrobiły to samo. Epickie gry, patrzę na ciebie.
Gusdor
7
Znajdź w pobliżu przyjaciela, który korzysta z Comcast ...
WernerCD
12
Symulowanie złego połączenia internetowego zawiera aktualne odpowiedzi i wiele więcej.
MichaelHouse
2
Natychmiast pomyślałem o innym ostatnim pytaniu SE: superuser.com/questions/637594/…
Patrick M

Odpowiedzi:

63

Myślę, że Dummynet jest tym, czego szukasz. Dummynet to narzędzie do emulacji sieci, które może symulować ograniczenia przepustowości, opóźnienia, straty pakietów i wiele innych. Możesz łatwo wybrać ruch, który chcesz przechwycić i skonfigurować ograniczenia, np. Aby ograniczyć cały przychodzący ruch TCP do 2 Mb / s, co robisz

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

Widzisz, że wybór ruchu odbywa się przez znaną zaporę ipfw, a potoki zapewniają funkcje ograniczenia.

Jest dostępny dla FreeBSD, Linux i Windows.

Marc Bury
źródło
czy to działa z adapterem pętli zwrotnej systemu Windows?
Andriy Tylychko,
odpowiadając na moje pytanie, nie, to nie działa dla mnie w systemie Windows 8.1, nawet po wyłączeniu podpisywania wzmocnienia sterownika
Andriy Tylychko
@AndyT Czy znalazłeś coś, co działa z pętlą zwrotną? Znalezienie czegoś, co powoduje spakowanie ORAZ działa z zapętleniem, wydaje się trudne.
AaronLS
@AaronLS: zobacz inną odpowiedź tutaj: gamedev.stackexchange.com/a/100779/4731
Andriy Tylychko
33

Kondycjoner łącza sieciowego

Jeśli korzystasz z komputera Mac, możesz użyć Network Link Conditioner.

Panel preferencji kondycjonera łącza sieciowego

Możesz symulować różne przypadki złych połączeń internetowych, w tym Edge i 3G.

Ponadto możesz tworzyć własne profile z własnymi ustawieniami:

Profile niestandardowe Network Link Conditioner

Jest to bezpłatne pobieranie w Xcode (przejdź do Xcode → Otwórz narzędzie programistyczne → Więcej narzędzi programistycznych… i pobierz sprzętowe narzędzia IO dla Xcode ).

grg
źródło
Lubię to narzędzie, ale potrzebuję czegoś, czego mogę użyć do automatycznego testowania. Czy ktoś wie, czy istnieje interfejs wiersza poleceń?
Erik B
15

Jeśli korzystasz z systemu Linux, możesz użyć netem do symulacji wszystkich możliwych problemów z siecią, takich jak duże opóźnienia, niska przepustowość, straty pakietów i wiele innych.

Istnieje opcja dla systemu Windows o nazwie NetLimiter, ale nie korzystałem z niej, więc nie mogę za nią ręczyć.

Właśnie znalazłem aplikację Mac o nazwie SlowlyApp .

Martin Tale
źródło
1
-1 Podobnie jak w przypadku innych odpowiedzi. To tylko linki. Zaktualizuj odpowiedź, aby zawierała opisy tego, co robią aplikacje i jak to robią.
MichaelHouse
8
@ Byte56: Aplikacje te symulują wolne i / lub zawodne połączenie sieciowe, tak jak pyta pytanie. Jestem całkiem pewien, jak to robią, jest poza zakresem tej strony. Powiedziałbym, że jest to bardzo dobra odpowiedź na zadane pytanie; jeśli jest jakiś problem, to w pytaniu, a nie w odpowiedziach.
Ilmari Karonen
1
Technicznie pytanie brzmi: „Jak mogę zasymulować złe połączenie internetowe”. Nie wymaga aplikacji, aby to zrobić. Ale tak, myślę, że to pytanie jest poza zakresem tej strony.
MichaelHouse
9

Niezdarny dla Windows Vista i 7.

niezdarny

użytkownik 2818782
źródło
działa dobrze dla Windows 8.1 na sprzężeniu
zwrotnym
Nie zapomnij uruchomić jako administrator. Lub po cichu nic nie robi. W przeciwnym razie świetne narzędzie.
Neolisk
7

Jak mogę zasymulować złe połączenie internetowe przy dużym opóźnieniu, niskiej przepustowości, fluktuacji i sporadycznej utracie pakietów w środowisku lokalnym?

Jeśli korzystasz z systemu Windows, możesz wypróbować emulator połączenia SoftPerfect . Zasadniczo jest to sterownik, który wstrzykuje się między twoją aplikacją a warstwą sieciową (podobną do Wireshark / WinPCAP) dla wybranej karty sieciowej i może symulować ograniczoną przepustowość, opóźnienie, utratę pakietów i inne rzeczy. Interfejs użytkownika jest prosty i jednoznaczny.

Jest to produkt komercyjny, ale wersja próbna pozwala wykonać 30-sekundowe serie „zakłóceń”, które powinny być wystarczająco dobre, abyś mógł ocenić, czy to narzędzie robi to, co chcesz.

Inną opcją dla wielu platform jest DummyNet , który zachowuje się w podobny sposób (przez ipfw), ale jest nieco mniej łatwy w użyciu.

Chciałbym przetestować sposób działania interfejsu użytkownika dla kogoś, kto nie ma tak dobrego połączenia z serwerem.

Myślę, że tę część pytania można przekształcić w następujący sposób: „jak radzić sobie z opóźnieniami sieci w mojej aplikacji?” Jedną z powszechnie stosowanych i skutecznych technik jest Dead Reckoning . Połączony artykuł wyjaśnia to lepiej niż ja, ale podstawową ideą jest to, że Twoi klienci „symulują”, gdzie powinna być każda jednostka i co powinna robić algorytmem. Ilekroć jednostka odbiega od tego algorytmu (tj. Dane wejściowe odtwarzacza, zdarzenie po stronie serwera itp.), Wysyła aktualizację do każdego klienta.

Justin ᚅᚔᚈᚄᚒᚔ
źródło
5

Nie używałem go od dłuższego czasu, ale użyłem Charlesa do przetestowania tego. Jest to aplikacja z różnymi narzędziami do diagnostyki sieci, w tym symulującymi wspomniane problemy: „złe połączenie internetowe o dużym opóźnieniu, niskiej przepustowości, fluktuacji i sporadycznej utracie pakietów”

jhocking
źródło
1
Na pierwszy rzut oka wygląda na to, że Charles jest rodzajem proxy HTTP, więc nie może kształtować zwykłego ruchu TCP lub UDP. Czy coś brakuje?
vbo
i ma nawet +5, wft?
Marian Paździoch
er Nie jestem pewien, co oznacza „kształtowanie zwykłego ruchu TCP lub UDP”, ale użyłem tego narzędzia do dokładnie tego, o co poprosił PO, symulując złe połączenie internetowe.
jhocking
1
@jhocking On oznacza, że ​​działa tylko dla ruchu HTTP. Wiele gier w czasie rzeczywistym korzysta z TCP lub UDP.
AaronLS,
0

Jeśli jesteś obeznany z Fiddler i interesujesz się tylko HTTP / 1, możesz to zrobić.

Skrzypek nie obsługuje HTTP / 2, przechwycenie go spowoduje obniżenie całego ruchu HTTP do HTTP / 1.

BanksySan
źródło
Ciekawy. Czy możesz podać więcej szczegółów? Może jakiś przykładowy skrypt?
Philipp
@Philipp Ta odpowiedź ( stackoverflow.com/a/47401557/442351 ) daje przykład.
BanksySan
Obsługuje tylko http? Nawet websockets? Więc nie sądzę, żeby miało to wiele zastosowania w tworzeniu gier. Jeśli martwisz się opóźnieniami, to w ogóle nie używałbyś http. Ale dzięki, że i tak o tym wspomniałeś.
Philipp
@Filipp obsługuje WebSockets, tylko gorący HTTP / 2. Chociaż powinieneś spojrzeć na HTTP / 2, nie ma to jak HTTP / 1, nie ma już blokowania nagłówka, więcej wielokrotnych uścisków dłoni, żadnych duplikatów nagłówków i / lub plików cookie.
BanksySan