Simulando una conexión lenta a Internet

188

Sé que esta es una pregunta extraña. Como generalmente desarrollo aplicaciones basadas en la "suposición" de que todos los usuarios tienen una conexión lenta a Internet. Pero, ¿alguien piensa que hay una manera de simular mediante programación una conexión lenta a Internet, para que yo pueda "ver" cómo funciona una aplicación bajo varias "velocidades de conexión"?

No me preocupa qué idioma se usa. Y no estoy buscando muestras de código ni nada, solo estoy interesado en la lógica detrás de esto.

Kara
fuente

Respuestas:

109

Si está ejecutando Windows, Fiddler es una gran herramienta. Tiene una configuración para simular la velocidad del módem, y para alguien que quiere más control tiene un complemento para agregar latencia a cada solicitud .

Prefiero usar una herramienta como esta a poner código de latencia en mi aplicación, ya que es una simulación mucho más realista, así como no hacer que diseñe o codifique los bits reales. El mejor código es el código que no tengo que escribir.

AGREGADO : Este artículo en el blog de Pavel Donchev sobre tecnologías de software muestra cómo crear velocidades simuladas personalizadas: limitar su velocidad de conexión a Internet con Fiddler .

Philip Rieck
fuente
66
Hola, escribí una pequeña guía sobre la simulación de una conexión lenta a Internet que podría ser útil: Revelaripoftheday.com/2010/12/… - divulgación completa - este es mi propio blog, pero en caso de que ayude, estoy dispuesto a difundir la buena palabra del violinista :-)
Alex KeySmith
El problema con este enfoque de violinista es que la simulación de latencia no es precisa, funciona en el nivel de protocolo incorrecto, por lo que no puede simular correctamente el inicio lento.
Sam Saffron
@SamSaffron, Perdón por desenterrar una publicación antigua como esta, pero, ¿conoces otras herramientas que ayuden en la simulación de inicios lentos?
Anish Ramaswamy
La mejor apuesta de @AnishRam es usar dummynet / ipfw que se envía con bsd y family, freebsd, osx, etc. barkingiguana.com/2009/12/04/…
Sam Saffron
@AnishRam También vea netem linuxfoundation.org/collaborate/workgroups/networking/netem puede simular un montón de condiciones usando iproute2.
Philip Rieck
154

A partir de Chrome 38 , puede hacerlo sin ningún complemento. Simplemente haga clic en inspeccionar elemento (o F12tecla de acceso rápido), luego haga clic en "alternar mod de dispositivo" ingrese la descripción de la imagen aquíy verá algo como esto:

ingrese la descripción de la imagen aquí

Entre muchas otras características, le permite simular una conexión a Internet específica (3G, GPRS)

PD para personas que intentan limitar la velocidad de carga. Lamentablemente, en este momento no es posible.

PS2 ahora no necesita alternar nada. El panel de regulación está disponible directamente desde el panel de red.ingrese la descripción de la imagen aquí

Tenga en cuenta que al hacer clic en Sin limitación , puede crear sus opciones de limitación personalizadas.

ingrese la descripción de la imagen aquí

Salvador Dalí
fuente
2
Ahora el acelerador de Chrome Dev Tools limita la velocidad de descarga y carga. Pero solo lo limita para la página actual en Chrome, por lo que no puede usarlo para probar su página en otros navegadores. Para hacer eso necesitas usar otras herramientas como Fiddler.
Leonid Vasilev
3
Vale la pena mencionar que actualmente WebSockets no se estrangula de esta manera: bugs.chromium.org/p/chromium/issues/detail?id=423246
mseddon
La limitación de carga no ha funcionado en algunas versiones de Chrome, incluida la última (70.0). Hay un informe de error en el rastreador .
Matt
En mi experiencia, la principal causa de la lentitud de la web es que el DNS débil de los ISP de cable no puede resolver servidores de anuncios o CDN. A veces, toda la página permanece en blanco hasta que el intento de resolverlos tiene éxito o se agota el tiempo de espera. ¿Puede Chrome simular esto?
StackOverthrow
45

Google recomienda :

Stin
fuente
1
Apple mantiene el Network Link Conditioner (por lo que es estable y confiable), PERO solo se aplica al simulador de Xcode.
Ben Wheeler
44
@BenWheeler Probado recientemente, seguramente se ha aplicado en todo el sistema, incluso localhost
aromero
2
Puedo confirmar que Network Link Conditioner se aplica a toda la pila de red.
Fred Vollmer
14

En máquinas Linux puedes usar wondershaper

apt-get install wondershaper

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

{down} y {up} son ancho de banda en kpbs

Entonces, por ejemplo, si desea limitar el ancho de banda de la interfaz eth1 a un enlace ascendente de 256 kbps y un enlace descendente de 128 kbps,

$ sudo wondershaper eth1 256 128

Para borrar el límite,

$ sudo wondershaper clear eth1 
Ornitorrinco anónimo
fuente
13

Estaba usando http://www.netlimiter.com/ y funciona muy bien. No solo limita la velocidad para procesos únicos, sino que también muestra las tasas de transferencia reales.

Piotr Müller
fuente
La mayoría de las otras herramientas proporcionan control de ancho de banda a través de latencia artificial, lo que no parece ser el caso con netlimiter, lo cual es algo bueno. Sin embargo, al final es una herramienta comercial (con una versión de prueba) y solo está disponible en Windows.
Aleksander Stelmaczonek
6

Existen servidores proxy TCP, como iprelay y Sloppy, que configuran el ancho de banda para simular conexiones lentas. También puede dar forma al ancho de banda y simular la pérdida de paquetes utilizando herramientas de filtrado de IP como ipfw e iptables.

hobbs
fuente
Gracias, echaré un vistazo a iprelay y Sloppy joe.
Gracias, ipfw funciona muy bien. Aquí hay una guía rápida que vi que fue útil: barkingiguana.com/2009/12/04/…
Eric Nguyen
4

Puede probar Dummynet , puede simular limitaciones de cola y ancho de banda, retrasos, pérdidas de paquetes y efectos de múltiples rutas

tszming
fuente
4

Utilice un proxy de depuración web con funciones de limitación, como Charles o Fiddler .

Los encontrarás útiles para el desarrollo web en general. La principal diferencia es que Charles es shareware, mientras que Fiddler es gratis.

Ben M
fuente
Lo ejecutas como un proxy. El navegador se conecta automáticamente a él y reenvía las solicitudes a su aplicación web.
Ben M
Para Fiddler, tiene ambos modos para trabajar dentro / fuera del navegador.
Ken D
4

Además, para simular una conexión lenta en algunos * nixes, puede intentar usar ipfw . Ben Newman proporciona más información sobre esta pregunta de Quora

Ehtesh Choudhury
fuente
2

Use una herramienta como TCPMon . Puede fingir una conexión lenta.

Básicamente, usted solicita exactamente lo mismo y simplemente envía la misma solicitud al servidor real, y luego retrasa la respuesta con solo la cantidad establecida de bytes.

pickypg
fuente
2

Puede usar NetEm (emulación de red) como un servidor proxy para emular muchas características de la red (velocidad, retraso, pérdida de paquetes, etc.). Controla la red usando el paquete iproute2 y está habilitado en el núcleo de la mayoría de las distribuciones de Linux.

Está controlado por la tcaplicación de línea de comandos (desde el paquete iproute2 ), pero también hay algunas GUI de interfaz web para NetEm, por ejemplo PHPnetemGUI2 .

La ventaja es que, como escribí, puede emular no solo diferentes velocidades de red, sino también, por ejemplo, la pérdida de paquetes, duplicación y / o corrupción, retraso aleatorio o definido, etc., por lo que puede emular varias redes de bajo rendimiento.

Para que su aplicación sea absolutamente transparente, puede configurar el sistema operativo para usar el servidor proxy NetEm, por lo que todas las conexiones desde esa máquina pasarán por NetEm. O puede configurar solo su aplicación para usarla como proxy.

Lo he estado usando para probar el rendimiento de una aplicación de Android en varias redes emuladas de bajo rendimiento.

David Ferenczy Rogožan
fuente
1

Mac OSX desde 10.10 tiene una aplicación llamada Murus Firewall , que actúa como una GUI para pf, el reemplazo de ipfw.

Funciona muy bien para la limitación de todo el sistema o específica del dominio. Solo pude usarlo para deslizar mi velocidad de descarga entre 300 Kbps y 30 Mbps para probar cómo se ajusta un reproductor de video en streaming.

Ben Wheeler
fuente
0

También hay otra herramienta llamada WIPFW: http://wipfw.sourceforge.net/

Es un poco vieja escuela, pero puedes usarla para simular una conexión más lenta. Está basado en Windows, y la herramienta le permite al administrador monitorear cuánto tráfico recibe el enrutador de una determinada máquina, o cuánto tráfico WWW está reenviando, por ejemplo.

Deano
fuente
0

Actualizando esto (9 años después de que se le preguntó) ya que la respuesta que estaba buscando no fue mencionada:

Firefox también tiene preajustes para acelerar las velocidades de conexión. Encuéntralos en el Monitor de red pestaña de las herramientas para desarrolladores. El valor predeterminado es "Sin limitación".

La más lenta es GPRS ( Velocidad de descarga: 50 Kbps, Velocidad de carga: 20 Kbps, Latencia mínima (ms): 500 ), que va desde 2G, 3G y 4G 'bueno' y 'regular' a DSL y WiFi ( Velocidad de descarga: 30Mbps, Carga velocidad: 15 Mbps, latencia mínima (ms): 2 ).

Más en los documentos de Dev Tools .

sistema perezoso
fuente
0

Para Linux, la siguiente lista de documentos puede ser útil:

Personalmente, aunque Dummynet es bueno, creo que NetEm es el más versátil para mis casos de uso; Por lo general, estoy interesado en el efecto de los retrasos, en lugar del ancho de banda (es decir, problemas de conexión WiFi), y es muy fácil emular la pérdida / corrupción aleatoria de paquetes, etc. También es muy accesible y gratuito (a diferencia de Linktropy basado en hardware )

En una nota al margen, para Windows, Clumsy es increíble. También me gustaría agregar que (con respecto a los sitios web) la limitación del navegador no es un método preciso para emular problemas de red de la vida real (creo que "TKK" comentó algunas de las razones por las cuales se mencionó anteriormente).

¡Espero que esto ayude a alguien!

Eugene
fuente
0

Un caso común de conformar una sola conexión TCP puede en realidad ensamblarse a partir de pares duales socaty cpipede manera UNIX de esta manera:

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

Esto simula una conexión con ancho de banda de aproximadamente 300 kb / s de su servicio en :5000y a aproximadamente 10 kB / s, y escuchas en :5555las conexiones entrantes. Advertencia : Tenga en cuenta que esto por conexión , por lo que cada conexión TCP individual obtiene esta cantidad.

Explicación: El exterior (izquierda) socatescucha con las opciones dadas :5555como un servidor de bifurcación. El primer cpipecomando en la SYSTEM:...opción a continuación estrangula datos, que entró en socket: 5555 (y sale del primero, externo socat) a como máximo 10kByte / s. Esos datos se reenvían usando otro socatque se conecta localhost:5000(donde el servicio que desea ralentizar debería estar escuchando). Luego, los datos de localhost:5000 se colocan en el cpipecomando correcto , que (con los valores dados) lo acelera a aproximadamente 300kB / s.

La opción -ngra cpipees importante. Hace que cpipe lea de forma no codiciosa desde su descriptor de archivo de entrada. De lo contrario, es posible que se quede atascado con los datos en los buffers que no se reenvían y esperan una respuesta.

Usando la bufferherramienta más común en lugar decpipeTambién es posible .

(Créditos: Esto se basa en la receta de "doble tee" de Christophe Loor de la socatdocumentación)

en ningún
fuente