Bagaimana saya bisa mensimulasikan koneksi internet yang buruk untuk keperluan pengujian?


105

Saya sedang mengembangkan game multiplayer online. Ini berfungsi dengan baik ketika saya mengujinya di jaringan area lokal, tetapi sebelum saya merilisnya saya ingin menguji bagaimana pengalaman pengguna bekerja untuk seseorang yang belum memiliki koneksi yang baik ke server. Bagaimana saya bisa mensimulasikan koneksi internet yang buruk dengan latensi tinggi, bandwidth rendah, jitter dan paket loss sesekali ketika di lingkungan lokal?


69
Kirimkan ke saya untuk pengujian! Koneksi di negara saya mengerikan secara default.
Stephan

7
Tujuan terpuji. Saya berharap studio yang diterbitkan akan melakukan hal yang sama. Epic Games, aku melihatmu.
Gusdor

7
Temukan teman terdekat yang menggunakan Comcast ...
WernerCD

12
Mensimulasikan koneksi internet yang buruk berisi jawaban saat ini dan banyak lagi.
MichaelHouse

2
Saya langsung memikirkan pertanyaan SE baru-baru ini lainnya: superuser.com/questions/637594/…
Patrick M

Jawaban:


63

Saya pikir Dummynet adalah apa yang Anda cari. Dummynet adalah alat emulasi jaringan yang dapat mensimulasikan batasan bandwidth, penundaan, kehilangan paket, dan banyak lagi. Anda dapat dengan mudah memilih lalu lintas yang ingin dihadang dan mengkonfigurasi batasan, misalnya untuk membatasi semua lalu lintas TCP yang masuk ke 2Mbit / s yang Anda lakukan

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

Anda melihat pemilihan lalu lintas dilakukan oleh firewall ipfw yang dikenal dan pipa menyediakan fitur pembatasan.

Ini tersedia untuk FreeBSD, Linux dan Windows.


apakah itu bekerja dengan adaptor loopback Windows?
Andriy Tylychko

untuk menjawab pertanyaan saya sendiri, tidak, itu tidak berfungsi untuk saya di Windows 8.1, bahkan setelah saya menonaktifkan penguatan driver yang ditandatangani
Andriy Tylychko

@AndyT Apakah Anda menemukan sesuatu yang berfungsi dengan loopback? Menemukan sesuatu yang tidak benar DAN bekerja dengan loopback tampaknya sulit.
AaronLS

@AaronLS: silakan lihat jawaban lain di sini: gamedev.stackexchange.com/a/100779/4731
Andriy Tylychko

33

Kondisioner Tautan Jaringan

Jika Anda menggunakan Mac, Anda dapat menggunakan Network Link Conditioner.

Panel Preferensi Kondisioner Tautan Jaringan

Anda dapat mensimulasikan berbagai kasus koneksi internet yang buruk, termasuk Edge dan 3G.

Selain itu, Anda dapat membuat profil Anda sendiri dengan pengaturan Anda sendiri:

Profil Kustom Kondisioner Tautan Jaringan

Ini adalah unduhan gratis di Xcode (pergi ke Xcode → Buka Alat Pengembang → Alat Pengembang Lainnya ... dan unduh Perangkat Keras IO Alat untuk Xcode ).


Saya suka alat ini, tapi saya butuh sesuatu yang bisa saya gunakan untuk pengujian otomatis. Adakah yang tahu kalau ada antarmuka baris perintah untuk ini?
Erik B

15

Jika Anda menggunakan linux, Anda dapat menggunakan netem untuk mensimulasikan semua masalah yang mungkin terjadi pada jaringan seperti latensi tinggi, bandwidth rendah, kehilangan paket, dan banyak lainnya.

Ada opsi untuk windows yang disebut NetLimiter tapi saya belum menggunakannya jadi tidak bisa menjaminnya.

Baru saja menemukan Aplikasi Mac bernama SlowlyApp .


1
-1 Seperti jawaban lainnya. Ini hanya tautan. Harap perbarui jawaban untuk menyertakan deskripsi tentang apa yang dilakukan aplikasi dan bagaimana mereka melakukannya.
MichaelHouse

8
@ Byte56: Apa yang dilakukan aplikasi ini adalah mensimulasikan koneksi jaringan yang lambat dan / atau tidak dapat diandalkan, seperti pertanyaannya. Saya cukup yakin bagaimana mereka melakukannya di luar ruang lingkup situs ini. Saya akan mengatakan ini adalah jawaban yang sangat baik untuk pertanyaan yang diajukan; jika ada masalah, ada di pertanyaan, bukan di jawaban.
Ilmari Karonen

1
Secara teknis, pertanyaannya adalah "Bagaimana saya bisa mensimulasikan koneksi internet yang buruk". Itu tidak meminta aplikasi untuk melakukannya. Tapi ya, saya pikir pertanyaan ini berada di luar cakupan situs ini.
MichaelHouse


7

Bagaimana saya bisa mensimulasikan koneksi internet yang buruk dengan latensi tinggi, bandwidth rendah, jitter dan paket loss sesekali ketika di lingkungan lokal?

Jika Anda menggunakan Windows, Anda dapat mencoba SoftPerfect Connection Emulator . Ini pada dasarnya driver yang menyuntikkan dirinya antara aplikasi Anda dan lapisan jaringan (mirip dengan Wireshark / WinPCAP) untuk NIC yang dipilih dan dapat mensimulasikan bandwidth terbatas, latensi, kehilangan paket, dan hal-hal lainnya. UI sederhana dan mudah.

Ini adalah produk komersial, tetapi percobaan memungkinkan Anda melakukan semburan "gangguan" selama 30 detik yang seharusnya cukup baik bagi Anda untuk menilai apakah alat ini melakukan apa yang Anda inginkan.

Opsi lintas-platform lainnya adalah DummyNet , yang berperilaku serupa (via ipfw) tetapi sedikit kurang mudah digunakan.

Saya ingin menguji bagaimana pengalaman pengguna bekerja untuk seseorang yang belum memiliki koneksi yang baik ke server.

Saya pikir bagian dari pertanyaan ini dapat dinyatakan kembali sebagai "bagaimana cara saya menangani latensi jaringan dalam aplikasi saya?" Salah satu teknik yang umum digunakan dan efektif adalah Dead Reckoning . Artikel yang ditautkan menjelaskannya lebih baik daripada yang saya bisa, tetapi ide dasarnya adalah bahwa klien Anda semacam "mensimulasikan" di mana setiap entitas seharusnya dan apa yang seharusnya dilakukan oleh suatu algoritma. Setiap kali entitas menyimpang dari algoritma ini (yaitu input pemain, acara sisi server, dll), ia mengirimkan pembaruan ke setiap klien.


5

Saya belum menggunakannya dalam beberapa saat, tetapi saya telah menggunakan Charles untuk menguji ini. Ini adalah aplikasi dengan berbagai alat diagnostik jaringan, termasuk mensimulasikan masalah yang Anda sebutkan: "koneksi internet yang buruk dengan latensi tinggi, bandwidth rendah, jitter, dan terkadang kehilangan paket"


1
Dari pandangan pertama sepertinya Charles adalah semacam proksi HTTP, sehingga tidak dapat membentuk trafik TCP atau UDP. Apakah saya melewatkan sesuatu?
vbo

dan bahkan mendapat +5, wft?
Marian Paździoch

er Saya tidak yakin apa arti "bentuk traffic TCP atau UDP", tetapi saya telah menggunakan alat ini untuk persis apa yang ditanyakan OP, mensimulasikan koneksi internet yang buruk.
jhocking

1
@jhocking Maksudnya hanya berfungsi untuk lalu lintas HTTP. Banyak game waktu nyata menggunakan TCP atau UDP.
AaronLS

0

Jika Anda cerdas dengan Fiddler , dan Anda hanya tertarik dengan HTTP / 1 maka Anda dapat membuat skrip ini.

Fiddler tidak mendukung HTTP / 2, mencegatnya akan menyebabkan semua lalu lintas HTTP turun ke HTTP / 1.


Menarik. Bisakah Anda memberikan rincian lebih lanjut? Mungkin beberapa contoh skrip?
Philipp

@ Pilip Jawaban ini ( stackoverflow.com/a/47401557/442351 ) memberikan contoh.
BanksySan

Ini hanya mendukung http? Bahkan tidak ada soket web? Maka saya tidak berpikir itu banyak digunakan dalam pengembangan game. Jika Anda khawatir tentang latensi maka Anda tidak akan menggunakan http sejak awal. Tapi terima kasih sudah menyebutkannya.
Philipp

@ Pilip tidak mendukung WebSockets, hanya HTTP / 2 panas. Meskipun, Anda harus melihat HTTP / 2, itu tidak seperti HTTP / 1, tidak ada lagi pemblokiran head-of-line, tidak ada lagi jabat tangan ganda, tidak ada lagi header dan / atau cookie duplikat.
BanksySan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.