Simulation d'une connexion Internet lente


188

Je sais que c'est une question étrange. Puisque je développe habituellement des applications basées sur "l'hypothèse" que tous les utilisateurs ont une connexion Internet lente. Mais, est-ce que quelqu'un pense qu'il existe un moyen de simuler par programmation une connexion Internet lente, afin que je puisse «voir» comment une application fonctionne à différentes «vitesses de connexion»?

Je ne m'inquiète pas de la langue utilisée. Et je ne cherche pas d'échantillons de code ou quoi que ce soit, juste intéressé par la logique derrière cela.

Réponses:


109

Si vous utilisez Windows, Fiddler est un excellent outil. Il a un paramètre pour simuler la vitesse du modem, et pour quelqu'un qui veut plus de contrôle a un plugin pour ajouter de la latence à chaque requête .

Je préfère utiliser un outil comme celui-ci plutôt que de mettre du code de latence dans mon application car il s'agit d'une simulation beaucoup plus réaliste, et de ne pas me faire concevoir ou coder les bits réels. Le meilleur code est un code que je n'ai pas à écrire.

AJOUT : Cet article sur le blog de Pavel Donchev sur les technologies logicielles montre comment créer des vitesses simulées personnalisées: Limiter la vitesse de votre connexion Internet avec Fiddler .


6
Salut, j'ai écrit un petit guide sur la simulation d'une connexion Internet lente qui pourrait être utile: developertipoftheday.com/2010/12/... - divulgation complète - c'est mon propre blog, mais juste au cas où cela aiderait car je suis tout à fait pour la diffusion le bon mot de violoneux :-)
Alex KeySmith

Le problème avec cette approche de fiddler est que la simulation de latence n'est pas précise, elle fonctionne au mauvais niveau de protocole afin que vous ne puissiez pas simuler correctement un démarrage lent.
Sam Saffron

@SamSaffron, Désolé de déterrer un ancien article comme celui-ci, mais connaissez-vous d'autres outils qui aident à la simulation de démarrages lents?
Anish Ramaswamy

Le meilleur pari de @AnishRam est d'utiliser dummynet / ipfw qui est livré avec bsd and family, freebsd, osx etc barkingiguana.com/2009/12/04
Sam Saffron

@AnishRam Voir également netem linuxfoundation.org/collaborate/workgroups/networking/netem peut simuler un tas de conditions en utilisant iproute2.
Philip Rieck

154

À partir de Chrome 38, vous pouvez le faire sans aucun plug-in. Cliquez simplement sur inspecter l'élément (ou le F12raccourci clavier), puis cliquez sur "basculer le module de périphérique" entrez la description de l'image iciet vous verrez quelque chose comme ceci:

entrez la description de l'image ici

Parmi de nombreuses autres fonctionnalités, il vous permet de simuler une connexion Internet spécifique (3G, GPRS)

PS pour les personnes qui essaient de limiter la vitesse de téléchargement. Malheureusement, à l'heure actuelle, ce n'est pas possible.

PS2 maintenant, vous n'avez plus besoin de basculer quoi que ce soit. Le panneau de limitation est disponible directement depuis le panneau de réseau.entrez la description de l'image ici

Notez qu'en cliquant sur Aucune limitation, vous pouvez créer vos options de limitation personnalisées.

entrez la description de l'image ici


2
Désormais, la limitation des outils de développement Chrome limite à la fois la vitesse de téléchargement et de téléchargement. Mais cela ne le limite que pour la page actuelle dans Chrome, vous ne pouvez donc pas l'utiliser pour tester votre page dans d'autres navigateurs. Pour ce faire, vous devez utiliser d'autres outils comme Fiddler.
Leonid Vasilev

3
Il est à noter qu'actuellement, les WebSockets ne sont pas limités de
mseddon

La limitation du téléchargement n'a pas fonctionné dans de nombreuses versions de Chrome, y compris la dernière (70.0). Il y a un rapport de bogue sur le tracker .
Matt

D'après mon expérience, la principale cause de la lenteur du Web est que le DNS floconneux des FAI par câble est incapable de résoudre les serveurs publicitaires ou les CDN. Parfois, la page entière reste vierge jusqu'à ce que la tentative de résolution réussisse ou expire. Chrome peut-il simuler cela?
StackOverthrow

45

1
Le conditionneur de lien réseau est maintenu par Apple (il est donc stable et fiable), MAIS il ne s'applique qu'au simulateur de Xcode.
Ben Wheeler

4
@BenWheeler Je l'ai essayé récemment, il a sûrement été appliqué à l'échelle du système, même localhost
aromero

2
Je peux confirmer que Network Link Conditioner est effectivement appliqué à l'ensemble de la pile réseau.
Fred Vollmer

14

Sur les machines Linux, vous pouvez utiliser wondershaper

apt-get install wondershaper

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

les {down} et {up} sont la bande passante en kpbs

Par exemple, si vous souhaitez limiter la bande passante de l'interface eth1 à 256kbps en liaison montante et 128kbps en liaison descendante,

$ sudo wondershaper eth1 256 128

Pour effacer la limite,

$ sudo wondershaper clear eth1 

13

J'utilisais http://www.netlimiter.com/ et cela fonctionne très bien. Non seulement limiter la vitesse pour les processus uniques, mais affiche également les taux de transfert réels.


La plupart des autres outils fournissent un contrôle de la bande passante via une latence artificielle, ce qui ne semble pas être le cas avec netlimiter, ce qui est une bonne chose. Cependant, au final, c'est un outil commercial (avec une version d'essai) et uniquement disponible sous Windows.
Aleksander Stelmaczonek

6

Il existe des proxys TCP, comme iprelay et Sloppy, qui modifient la bande passante pour simuler des connexions lentes. Vous pouvez également faire la mise en forme de la bande passante et simuler la perte de paquets à l'aide d'outils de filtrage IP comme ipfw et iptables.


Merci, je vais jeter un œil sur iprelay et Sloppy Joe.

Merci, ipfw fonctionne très bien. Voici un guide rapide que j'ai vu et qui a été utile: barkingiguana.com/2009/12/04/…
Eric Nguyen

4

Vous pouvez essayer Dummynet , il peut simuler les limitations de file d'attente et de bande passante, les retards, les pertes de paquets et les effets de trajets multiples


4

Utilisez un proxy de débogage Web avec des fonctionnalités de limitation, telles que Charles ou Fiddler .

Vous les trouverez utiles pour le développement Web en général. La principale différence est que Charles est un shareware, alors que Fiddler est gratuit.


Vous l'exécutez en tant que proxy. Le navigateur s'y connecte automatiquement et transmet les demandes à votre application Web.
Ben M

Pour Fiddler, il dispose des deux modes pour fonctionner à l'intérieur / à l'extérieur du navigateur.
Ken D

4

De plus, pour simuler une connexion lente sur certains * nix, vous pouvez essayer d'utiliser ipfw . Plus d'informations sont fournies par la réponse de Ben Newman à cette question Quora


2

Utilisez un outil comme TCPMon . Cela peut simuler une connexion lente.

Fondamentalement, vous lui demandez exactement la même chose et il transmet simplement exactement la même demande au serveur réel, puis retarde la réponse avec uniquement le nombre d'octets défini.


2

Vous pouvez utiliser NetEm (Network Emulation) comme serveur proxy pour émuler de nombreuses caractéristiques du réseau (vitesse, délai, perte de paquets, etc.). Il contrôle la mise en réseau à l'aide du package iproute2 et est activé dans le noyau de la plupart des distributions Linux.

Il est contrôlé par l' tcapplication de ligne de commande (à partir du package iproute2 ), mais il existe également des interfaces graphiques pour NetEm, par exemple PHPnetemGUI2 .

L'avantage est que, comme je l'ai écrit, il peut émuler non seulement différentes vitesses de réseau, mais aussi, par exemple, la perte de paquets, la duplication et / ou la corruption, le retard aléatoire ou défini, etc., afin que vous puissiez émuler divers réseaux peu performants.

Pour votre application, c'est absolument transparent, vous pouvez configurer le système d'exploitation pour utiliser le serveur proxy NetEm, de sorte que toutes les connexions de cette machine passeront par NetEm. Ou vous pouvez configurer uniquement votre application pour l'utiliser comme proxy.

Je l'ai utilisé pour tester les performances d'une application Android sur divers réseaux émulés à faible performance.


1

Mac OSX depuis 10.10 a une application appelée Murus Firewall , qui agit comme une interface graphique pour pf, le remplacement d'ipfw.

Cela fonctionne très bien pour la limitation à l'échelle du système ou spécifique au domaine. J'ai juste pu l'utiliser pour faire glisser ma vitesse de téléchargement entre 300 Kbps et 30 Mbps pour tester comment un lecteur vidéo en streaming s'ajuste.


0

Il existe également un autre outil appelé WIPFW - http://wipfw.sourceforge.net/

C'est un peu old school, mais vous pouvez l'utiliser pour simuler une connexion plus lente. Il est basé sur Windows et l'outil permet à l'administrateur de surveiller la quantité de trafic que le routeur reçoit d'une certaine machine, ou la quantité de trafic WWW qu'il transfère, par exemple.


0

Mettre à jour ceci (9 ans après que cela a été demandé) car la réponse que je cherchais n'était pas mentionnée:

Firefox a également des préréglages pour limiter les vitesses de connexion. Trouvez-les dans l' onglet Moniteur réseau des outils de développement. La valeur par défaut est «Pas de limitation».

Le plus lent est le GPRS ( vitesse de téléchargement: 50 Kbps, vitesse de téléchargement: 20 Kbps, latence minimale (ms): 500 ), allant de 2G `` bon '' et `` normal '', 3G et 4G vers DSL et WiFi ( vitesse de téléchargement: 30 Mbps, téléchargement vitesse: 15Mbps, Latence minimum (ms): 2 ).

Plus d'informations dans la documentation des outils de développement .


0

Pour Linux, la liste d'articles suivante peut être utile:

Personnellement, bien que Dummynet soit bon, je trouve que NetEm est le plus polyvalent pour mes cas d'utilisation; Je suis généralement intéressé par l'effet des retards, plutôt que par la bande passante (c'est-à-dire les problèmes de connexion WiFi), et il est très facile d'émuler la perte / corruption de paquets aléatoires, etc. Il est également très accessible et gratuit (contrairement au Linktropy basé sur le matériel ).

En passant, pour Windows, Clumsy est génial. Je voudrais également ajouter que (concernant les sites Web) la limitation du navigateur n'est pas une méthode précise pour émuler des problèmes de réseau réels (je pense que "TKK" a commenté quelques-unes des raisons ci-dessus).

J'espère que cela aide quelqu'un!


0

Un cas courant de mise en forme d'une seule connexion TCP peut en fait être assemblé à partir de paires doubles de socatet cpipeà la mode UNIX comme ceci:

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

Cela simule une connexion avec une bande passante d'environ 300 Ko / s de votre service à :5000et à environ 10 Ko / s et écoute sur :5555les connexions entrantes. Attention : notez que cela par connexion , donc chaque connexion TCP individuelle obtient ce montant.

Explication: L'extérieur (à gauche) socatécoute avec les options données en :5555tant que serveur de forking. La première cpipecommande de l' SYSTEM:...option limite alors les données qui sont entrées dans le socket: 5555 (et sortent de la première, externe socat) à au plus 10 ko / s. Ces données sont ensuite transférées en utilisant un autre socatqui se connecte localhost:5000(où le service que vous souhaitez ralentir devrait écouter). Les données de localhost:5000 sont ensuite placées dans la bonne cpipecommande, qui (avec les valeurs données) les limite à environ 300 Ko / s.

L'option -ngrde cpipeest importante. Cela oblige cpipe à lire de manière non avide à partir de son descripteur de fichier d'entrée. Sinon, vous risquez de rester bloqué avec des données dans les tampons qui ne sont pas transférées et qui attendent une réponse.

Utiliser l' bufferoutil le plus courant au lieu decpipe est probablement également possible.

(Crédits: Ceci est basé sur la recette "double-tee" de Christophe Loor de la socatdocumentation)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.