Mensimulasikan Koneksi Internet yang Lambat

188

Saya tahu ini adalah pertanyaan aneh. Karena saya biasanya mengembangkan aplikasi berdasarkan "asumsi" bahwa semua pengguna memiliki koneksi internet yang lambat. Tetapi, apakah ada yang berpikir bahwa ada cara untuk mensimulasikan secara terprogram koneksi internet yang lambat, sehingga saya dapat "melihat" bagaimana suatu aplikasi bekerja di bawah berbagai "kecepatan koneksi"?

Saya tidak khawatir tentang bahasa yang digunakan. Dan saya tidak mencari sampel kode atau apa pun, hanya tertarik pada logika di baliknya.

Kara
sumber

Jawaban:

109

Jika Anda menjalankan windows, fiddler adalah alat yang hebat. Ini memiliki pengaturan untuk mensimulasikan kecepatan modem, dan untuk seseorang yang ingin lebih banyak kontrol memiliki plugin untuk menambahkan latensi untuk setiap permintaan .

Saya lebih suka menggunakan alat seperti ini untuk meletakkan kode latensi dalam aplikasi saya karena ini adalah simulasi yang jauh lebih realistis, serta tidak membuat saya mendesain atau mengkodekan bit yang sebenarnya. Kode terbaik adalah kode yang tidak harus saya tulis.

TAMBAH : Artikel ini di blog Pavel Donchev di Software Technologies menunjukkan cara membuat kecepatan simulasi tersuai: Membatasi kecepatan koneksi Internet Anda dengan Fiddler .

Philip Rieck
sumber
6
Hai Saya menulis sedikit panduan tentang mensimulasikan koneksi internet lambat yang mungkin berguna: developertipoftheday.com/2010/12/… - pengungkapan penuh - ini adalah blog saya sendiri, tetapi untuk berjaga-jaga jika ini membantu karena saya semua sudah menyebar kata bagus dari pemain biola :-)
Alex KeySmith
Masalahnya dengan pendekatan fiddler ini adalah bahwa simulasi latensi tidak akurat, ia beroperasi pada tingkat protokol yang salah sehingga Anda tidak dapat mensimulasikan dengan benar mulai lambat.
Sam Saffron
@SamSaffron, Maaf untuk menggali posting lama seperti ini, tetapi, apakah Anda tahu alat lain yang membantu dalam simulasi mulai lambat?
Anish Ramaswamy
@AnishRam taruhan terbaik adalah dengan menggunakan dummynet / ipfw yang dikirimkan bersama bsd dan keluarga, freebsd, osx dll barkingiguana.com/2009/12/04/…
Sam Saffron
@AnishRam Juga lihat netem linuxfoundation.org/collaborate/workgroups/networking/netem dapat mensimulasikan banyak kondisi menggunakan iproute2.
Philip Rieck
154

Dimulai dengan Chrome 38 Anda dapat melakukan ini tanpa plugin apa pun. Cukup klik periksa elemen (atau F12hotkey), lalu klik "toggle device mod" masukkan deskripsi gambar di sinidan Anda akan melihat sesuatu seperti ini:

masukkan deskripsi gambar di sini

Di antara banyak fitur lainnya, ini memungkinkan Anda untuk mensimulasikan koneksi internet spesifik (3G, GPRS)

PS untuk orang yang mencoba membatasi kecepatan unggah. Sayangnya pada saat ini tidak mungkin.

PS2 sekarang Anda tidak perlu beralih apa pun. Panel pelambatan tersedia langsung dari panel jaringan.masukkan deskripsi gambar di sini

Perhatikan bahwa sambil mengeklik opsi Tidak ada pelambatan, Anda dapat membuat opsi pelambatan khusus Anda.

masukkan deskripsi gambar di sini

Salvador Dali
sumber
2
Sekarang Chrome Dev Tools membatasi kecepatan pengunduhan dan pengunggahan. Tapi itu hanya membatasi untuk halaman saat ini di Chrome, jadi Anda tidak dapat menggunakannya untuk menguji halaman Anda di browser lain. Untuk melakukan itu, Anda perlu menggunakan alat lain seperti Fiddler.
Leonid Vasilev
3
Perlu disebutkan bahwa saat ini WebSockets tidak dibatasi dengan
mseddon
Throttling unggahan tidak berfungsi di beberapa versi Chrome termasuk yang terbaru (70.0). Ada laporan bug di pelacak .
Matt
Dalam pengalaman saya, penyebab terbesar dari kelambatan web adalah DNS tidak stabil dari kabel ISP karena tidak dapat menyelesaikan server iklan atau CDN. Terkadang seluruh halaman tetap kosong sampai upaya untuk menyelesaikannya berhasil atau habis. Bisakah Chrome mensimulasikan ini?
StackOverthrow
45

Google merekomendasikan :

Stin
sumber
1
Network Link Conditioner dikelola oleh Apple (jadi itu stabil dan dapat diandalkan), TETAPI itu hanya berlaku untuk simulator Xcode.
Ben Wheeler
4
@BenWheeler Mencoba ini baru-baru ini pasti telah diterapkan sistem yang luas, bahkan localhost
aromero
2
Saya dapat mengonfirmasi bahwa Network Link Conditioner memang diterapkan ke seluruh tumpukan jaringan.
Fred Vollmer
14

Di mesin Linux, Anda dapat menggunakan wondershaper

apt-get install wondershaper

$ sudo wondershaper {interface} {down} {up}

{down} dan {up} adalah bandwidth dalam kpbs

Jadi misalnya jika Anda ingin membatasi bandwidth antarmuka eth1 ke 256kbps uplink dan 128kbps downlink,

$ sudo wondershaper eth1 256 128

Untuk menghapus batas,

$ sudo wondershaper clear eth1 
Platypus Anonim
sumber
13

Saya menggunakan http://www.netlimiter.com/ dan bekerja dengan sangat baik. Tidak hanya membatasi kecepatan untuk proses tunggal tetapi juga menunjukkan kecepatan transfer aktual.

Piotr Müller
sumber
Sebagian besar alat lain menyediakan kontrol bandwidth melalui latensi buatan yang tampaknya tidak sesuai dengan netlimiter yang merupakan hal yang baik. Namun, pada akhirnya ini adalah alat komersial (dengan versi percobaan) dan hanya tersedia di Windows.
Aleksander Stelmaczonek
6

Ada proksi TCP di luar sana, seperti iprelay dan Sloppy, yang melakukan bandwidth membentuk untuk mensimulasikan koneksi lambat. Anda juga dapat melakukan pembentukan bandwidth dan mensimulasikan kehilangan paket menggunakan alat pemfilteran IP seperti ipfw dan iptables.

hobbs
sumber
Terima kasih, saya akan melihat ke dalam iprelay dan Sloppy joe.
Terima kasih, ipfw berfungsi dengan baik. Berikut panduan singkat yang saya lihat sangat membantu: barkingiguana.com/2009/12/04/...
Eric Nguyen
4

Anda dapat mencoba Dummynet , ia dapat mensimulasikan batasan antrian dan bandwidth, penundaan, kehilangan paket, dan efek multipath

tszming
sumber
4

Gunakan proxy debugging web dengan fitur pelambatan, seperti Charles atau Fiddler .

Anda akan menemukan mereka pengembangan web yang bermanfaat secara umum. Perbedaan utama adalah bahwa Charles adalah shareware, sedangkan Fiddler gratis.

Ben M
sumber
Anda menjalankannya sebagai proxy. Browser secara otomatis terhubung ke sana, dan itu meneruskan permintaan ke aplikasi web Anda.
Ben M
Untuk Fiddler, ia memiliki kedua mode untuk bekerja di dalam / di luar browser.
Ken D
4

Juga, untuk mensimulasikan koneksi lambat pada beberapa * nixes, Anda dapat mencoba menggunakan ipfw . Informasi lebih lanjut diberikan oleh jawaban Ben Newman tentang pertanyaan Quora ini

Ehtesh Choudhury
sumber
2

Gunakan alat seperti TCPMon . Itu bisa memalsukan koneksi yang lambat.

Pada dasarnya, Anda memintanya hal yang sama persis dan itu hanya meneruskan permintaan yang sama persis ke server nyata, dan kemudian menunda respons dengan hanya jumlah byte yang ditetapkan.

pickypg
sumber
2

Anda dapat menggunakan NetEm (Emulasi Jaringan) sebagai server proxy untuk meniru banyak karakteristik jaringan (kecepatan, penundaan, kehilangan paket, dll.). Ini mengontrol jaringan menggunakan paket iproute2 dan itu diaktifkan di kernel dari kebanyakan distribusi Linux.

Ini dikendalikan oleh aplikasi tccommand-line (dari paket iproute2 ), tetapi ada juga beberapa antarmuka web GUI untuk NetEm, misalnya PHPnetemGUI2 .

Keuntungannya adalah, seperti yang saya tulis, ia dapat meniru tidak hanya kecepatan jaringan yang berbeda tetapi juga, misalnya, paket yang hilang, duplikasi dan / atau korupsi, penundaan acak atau pasti, dll., Sehingga Anda dapat meniru berbagai jaringan yang berkinerja buruk.

Untuk aplikasi Anda ini benar-benar transparan, Anda dapat mengkonfigurasi sistem operasi untuk menggunakan server proxy NetEm, sehingga semua koneksi dari mesin itu akan melalui NetEm. Atau Anda hanya dapat mengonfigurasi aplikasi Anda untuk menggunakannya sebagai proxy.

Saya telah menggunakannya untuk menguji kinerja aplikasi Android di berbagai jaringan yang bereplikasi buruk.

David Ferenczy Rogožan
sumber
1

Mac OSX sejak 10.10 memiliki aplikasi bernama Murus Firewall , yang bertindak sebagai GUI untuk pf, pengganti ipfw.

Ini bekerja sangat baik untuk pelambatan sistem atau domain-spesifik. Saya hanya bisa menggunakannya untuk menggeser kecepatan unduh saya antara 300Kbps dan 30Mbps untuk menguji bagaimana pemutar video streaming menyesuaikan.

Ben Wheeler
sumber
0

Ada juga alat lain yang disebut WIPFW - http://wipfw.sourceforge.net/

Ini sekolah yang agak tua, tetapi Anda dapat menggunakannya untuk mensimulasikan koneksi yang lebih lambat. Ini berbasis Windows, dan alat ini memungkinkan administrator untuk memonitor berapa banyak traffic yang didapat router dari mesin tertentu, atau berapa banyak traffic WWW yang diteruskan, misalnya.

Deano
sumber
0

Memperbarui ini (9 tahun setelah ditanya) karena jawaban yang saya cari tidak disebutkan:

Firefox juga memiliki preset untuk pembatasan kecepatan koneksi. Temukan mereka di tab Monitor Jaringan pada alat pengembang. Standarnya adalah 'Tidak ada pembatasan'.

Terlambat adalah GPRS ( Kecepatan unduh: 50 Kbps, Kecepatan unggah: 20 Kbps, Latensi minimum (ms): 500 ), mulai dari 2G 'baik' dan 'biasa', 3G dan 4G ke DSL dan WiFi ( Kecepatan unduh: 30Mbps, Unggah kecepatan: 15Mbps, Latensi minimum (ms): 2 ).

Lebih banyak di dokumen Dev Tools .

lazysoundsystem
sumber
0

Untuk Linux, daftar makalah berikut mungkin berguna:

Secara pribadi, walaupun Dummynet bagus, saya menemukan NetEm sebagai yang paling serbaguna untuk kasus penggunaan saya; Saya biasanya tertarik pada efek keterlambatan, bukan bandwidth (yaitu masalah koneksi WiFi), dan sangat mudah untuk meniru kehilangan paket acak / korupsi, dll. Ini juga sangat mudah diakses, dan gratis (tidak seperti Linktropy berbasis hardware ).

Di samping catatan, untuk Windows, Clumsy mengagumkan. Saya juga ingin menambahkan bahwa (mengenai situs web) pembatasan browser bukanlah metode yang akurat untuk meniru masalah jaringan kehidupan nyata (saya pikir "TKK" mengomentari beberapa alasan mengapa di atas).

Semoga ini bisa membantu seseorang!

Eugene
sumber
0

Salah satu kasus umum membentuk koneksi TCP tunggal sebenarnya dapat dirakit dari pasangan ganda socatdan cpipedalam mode UNIX seperti ini:

socat TCP-LISTEN:5555,reuseaddr,reuseport,fork SYSTEM:'cpipe -ngr -b 1 -s 10 | socat - "TCP:localhost:5000" | cpipe -ngr -b 1 -s 300'

Ini mensimulasikan koneksi dengan bandwidth sekitar 300 kB / s dari layanan Anda di :5000dan hingga sekitar 10kB / s dan mendengarkan :5555untuk koneksi masuk. Peringatan : Perhatikan bahwa ini per-koneksi , sehingga setiap koneksi TCP individu mendapatkan jumlah ini.

Penjelasan: Bagian luar (kiri) socatmendengarkan dengan opsi yang diberikan :5555sebagai server forking. cpipePerintah pertama dalam SYSTEM:...opsi kemudian throttles data yang masuk ke soket: 5555 (dan keluar dari yang pertama, luar socat) hingga paling banyak 10kByte / s. Data itu kemudian diteruskan menggunakan yang lain socatyang terhubung localhost:5000(di mana layanan yang Anda ingin memperlambat harus mendengarkan). Data dari localhost:5000 kemudian dimasukkan ke dalam cpipeperintah yang benar , yang (dengan nilai yang diberikan) mengecilkannya menjadi sekitar 300 kB / s.

Pilihan -ngruntuk cpipeitu penting. Itu menyebabkan cpipe membaca dengan tidak rakus dari file-deskriptor inputnya. Jika tidak, Anda mungkin terjebak dengan data di buffer yang tidak diteruskan dan menunggu balasan.

Menggunakan alat yang lebih umum bufferdaripada cpipemungkin juga mungkin.

(Penghargaan: Ini berdasarkan resep "tee ganda" oleh Christophe Loor dari socatdokumentasi)

onno
sumber