Kötü bir internet bağlantısını test amacıyla nasıl simüle edebilirim?


105

Çevrimiçi çok oyunculu bir oyun geliştiriyorum. Yerel alan ağında test ettiğimde iyi çalışıyor, ancak yayınlamadan önce, kullanıcı deneyiminin sunucuya bu kadar iyi bir bağlantısı olmayan biri için nasıl çalıştığını test etmek istiyorum. Yerel bir ortamda yüksek gecikme süresi, düşük bant genişliği, titreşim ve zaman zaman paket kaybı ile kötü bir internet bağlantısını nasıl simüle edebilirim?


69
Test için bana gönder! Ülkemdeki bağlantılar varsayılan olarak korkunç.
Stephan,

7
Övgüye değer bir hedef. Keşke yayınlanmış stüdyolar da aynısını yaparsa. Epic Games, sana bakıyorum.
Gusdor

7
Yakında Comcast kullanan bir arkadaş bul ...
WernerCD

12
Kötü bir internet bağlantısını taklit etmek güncel cevapları ve daha fazlasını içerir.
MichaelHouse

2
Bu son SE sorusunu hemen düşündüm: superuser.com/questions/637594/…
Patrick M

Yanıtlar:


63

Bence Dummynet aradığın şey. Dummynet, bant genişliği sınırlamalarını, gecikmeleri, paket kayıplarını ve daha fazlasını simüle edebilen bir ağ emülasyon aracıdır. Hangi trafiği sınırlamaları kesmek ve yapılandırmak istediğinizi kolayca seçebilirsiniz, örneğin gelen tüm TCP trafiğini 2Mbit / s ile sınırlamak için

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

Trafik seçiminin bilinen ipfw firewall tarafından yapıldığını ve boruların sınırlama özelliklerini sağladığını görüyorsunuz.

FreeBSD, Linux ve Windows için kullanılabilir.


Windows loopback bağdaştırıcısı ile çalışıyor mu?
Andriy Tylychko,

kendi soruma cevap vermek
gerekirse

@AndyT Geri döngü ile çalışan bir şey mi buldunuz? Packloss ve AND geri döngü ile çalışan bir şey bulmak zor görünüyor.
AaronLS

@AaronLS: lütfen burada başka bir cevaba bakınız: gamedev.stackexchange.com/a/100779/4731
Andriy Tylychko

33

Ağ Bağlantısı Kremi

Mac kullanıyorsanız, Network Link Conditioner'ı kullanabilirsiniz.

Ağ Bağlantısı Şartlandırıcı Tercih Bölmesi

Edge ve 3G de dahil olmak üzere çeşitli kötü internet bağlantısı durumlarını taklit edebilirsiniz.

Ek olarak, kendi ayarlarınızı kendi ayarlarınızla oluşturabilirsiniz:

Ağ Bağlantısı Kremi Özel Profiller

Xcode'da ücretsiz indirilebiliyor (Xcode → Geliştirici Yazılımını Aç → Diğer Geliştirici Araçları ... bölümüne gidin ve Xcode için Donanım IO Araçlarını indirin ).


Bu araçları seviyorum, ancak otomatik testler için kullanabileceğim bir şeye ihtiyacım var. Bunun için bir komut satırı arayüzü olup olmadığını bilen var mı?
Erik B,

15

Linux kullanıyorsanız netem'i , yüksek gecikme süresi, düşük bant genişliği, paket kayıpları ve diğerleri gibi ağla ilgili olası tüm sorunları simüle etmek için kullanabilirsiniz .

NetLimiter adında pencereler için bir seçenek var ama ben kullanmadım, bu yüzden kefil olamaz.

Az önce SlowlyApp adında bir Mac App buldum .


1
-1 Diğer cevaplarda olduğu gibi. Bu sadece bağlantılar. Lütfen uygulamaların ne yaptığı ve nasıl yaptıkları hakkında açıklamalar eklemek için cevabı güncelleyin.
MichaelHouse

8
@ Byte56: Bu uygulamaların yaptığı, yavaşça ve / veya güvenilmez bir ağ bağlantısını taklit etmek, tıpkı bir soru sorduğu gibi. Nasıl yaptıklarını bu sitenin kapsamı dışında olduğundan eminim . Bunun, sorulan soruya mükemmel bir cevap olduğunu söyleyebilirim; eğer bir sorun varsa, soruda, cevaplarda değil.
Ilmari Karonen 16

1
Teknik olarak, soru “Kötü bir internet bağlantısını nasıl simüle edebilirim” diye soruyor. Uygulamaların bunu yapmasını istemiyor. Ancak evet, bu sorunun bu sitenin kapsamı dışında olduğunu düşünüyorum.
Michaelhouse

9

Sakar , Windows Vista ve 7 için.

sakar


loopback üzerinde Windows 8.1 için iyi çalışıyor
Andriy Tylychko

Yönetici olarak çalıştırmayı unutma. Ya da sessizce hiçbir şey yapmaz. Aksi takdirde harika bir araç.
Neolisk

7

Yerel bir ortamda yüksek gecikme süresi, düşük bant genişliği, titreşim ve zaman zaman paket kaybı ile kötü bir internet bağlantısını nasıl simüle edebilirim?

Windows kullanıyorsanız, SoftPerfect Connection Emulator uygulamasını deneyebilirsiniz . Temel olarak, seçilen NIC için uygulamanız ve ağ katmanı (Wireshark / WinPCAP'a benzer) arasında kendisini enjekte eden ve sınırlı bant genişliği, gecikme süresi, paket kaybı ve diğer şeyleri simüle edebilen bir sürücüdür. UI basit ve anlaşılır.

Bu ticari bir ürün, ancak deneme, bu aracın istediğinizi yapıp yapmadığını yargılamanız için yeterince iyi olması gereken 30 saniyelik “parazit” patlamalarını yapmanızı sağlar.

Diğer bir platformlar arası seçenek, benzer şekilde davranan (ipfw yoluyla) fakat kullanımı biraz daha az olan DummyNet'tir .

Sunucu ile bu kadar iyi bir bağlantısı olmayan biri için kullanıcı deneyiminin nasıl çalıştığını test etmek istiyorum.

Sorunun bu kısmının "uygulamamdaki ağ gecikmesini nasıl ele alabilirim?" Şeklinde yeniden adlandırılabileceğini düşünüyorum. Yaygın olarak kullanılan ve etkili bir teknik Ölü Hesaplaşma'dır . Bağlantılı makale bunu yapabileceğimden daha iyi açıklıyor, ancak temel fikir müşterilerinizin her bir işletmenin nerede olması gerektiği ve bir algoritma ile ne yapması gerektiği konusunda "taklit" etmesi. Bir varlık bu algoritmadan saptığında (örn. Oyuncu girişi, sunucu tarafı olayı vb.), Her müşteriye bir güncelleme gönderir.


5

Bir süredir kullanmadım, ama Charles'ı test etmek için kullandım . Bahsettiğiniz sorunları simüle etmek de dahil olmak üzere çeşitli ağ tanılama araçlarına sahip bir uygulamadır: "yüksek gecikme süresi, düşük bant genişliği, titreşim ve zaman zaman paket kaybı ile kötü bir internet bağlantısı"


1
İlk bakışta, Charles bir tür HTTP proxy gibi görünüyor, bu nedenle düz TCP veya UDP trafiğini şekillendiremiyor. Bir şey mi eksik?
vbo

ve +5 bile oldu mu?
Marian Paździoch

er "düz TCP veya UDP trafiğinin şekli" nin ne anlama geldiğinden emin değilim, ancak bu aracı tam olarak OP'nin sorduğu şey için kullandım, kötü bir internet bağlantısını simüle ettim.
15'te 18

1
@jhocking Yalnızca HTTP trafiği için çalıştığı anlamına gelir. Birçok gerçek zamanlı oyun TCP veya UDP kullanır.
AaronLS

0

Eğer sahip yetenekli iseniz Fiddler , ve sen sadece HTTP / 1 sonra yapabilirsiniz komut bu ilgi.

Fiddler HTTP / 2'yi desteklemiyor, bununla etkileşmek tüm HTTP trafiğinin HTTP / 1'e düşmesine neden olacak.


İlginç. Daha fazla ayrıntı verebilir misiniz? Belki bazı örnek komut dosyası?
Philipp

@Philipp Bu cevap ( stackoverflow.com/a/47401557/442351 ) bir örnek verir.
BanksySan

Sadece http destekliyor mu? Hatta websockets değil mi? O zaman oyun geliştirmede fazla bir faydası olduğunu sanmıyorum. Gecikme konusunda endişeleniyorsanız, ilk başta http kullanmazsınız. Ama yine de bahsettiğin için teşekkürler.
Philipp

@Philipp, yalnızca sıcak HTTP / 2 olan WebSockets özelliğini desteklemektedir. Buna rağmen, HTTP / 2'ye bakmalısınız, HTTP / 1 gibi bir şey yok, artık satır başı engelleme yok, birden fazla el sıkışma yok, tekrarlanan başlıklar ve / veya çerezler yok.
BanksySan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.