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?


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.


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 ).


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 .


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


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.


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”


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.