¿Cómo puedo simular una mala conexión a Internet con fines de prueba?


105

Estoy desarrollando un juego multijugador en línea. Funciona bien cuando lo pruebo en la red de área local, pero antes de lanzarlo, me gustaría probar cómo funciona la experiencia del usuario para alguien que no tiene una conexión tan buena con el servidor. ¿Cómo puedo simular una mala conexión a Internet con alta latencia, bajo ancho de banda, jitter y pérdida ocasional de paquetes en un entorno local?


69
¡Mándamelo para probar! Las conexiones en mi país son horribles por defecto.
Stephan

77
Un objetivo encomiable. Desearía que los estudios publicados hicieran lo mismo. Juegos épicos, te estoy mirando.
Gusdor

77
Encuentra un amigo cercano que use Comcast ...
WernerCD

12
Simular una mala conexión a Internet contiene las respuestas actuales y más.
MichaelHouse

2
Inmediatamente pensé en esta otra pregunta reciente de SE: superuser.com/questions/637594/…
Patrick M

Respuestas:


63

Creo que Dummynet es lo que estás buscando. Dummynet es una herramienta de emulación de red que puede simular limitaciones de ancho de banda, demoras, pérdidas de paquetes y mucho más. Puede elegir fácilmente qué tráfico desea interceptar y configurar las limitaciones, por ejemplo, para limitar todo el tráfico TCP entrante a 2Mbit / s que haga

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

Verá que la selección de tráfico se realiza mediante el firewall ipfw conocido y las tuberías proporcionan las características de limitación.

Está disponible para FreeBSD, Linux y Windows.


¿funciona con el adaptador de bucle invertido de Windows?
Andriy Tylychko

para responder mi propia pregunta, no, no me funciona en Windows 8.1, incluso después de que desactivé el refuerzo de controlador firmado
Andriy Tylychko

@AndyT ¿Encontraste algo que funcione con loopback? Encontrar algo que empaca y funciona con loopback parece difícil.
AaronLS

@AaronLS: vea otra respuesta aquí: gamedev.stackexchange.com/a/100779/4731
Andriy Tylychko el

33

Acondicionador de enlace de red

Si estás en una Mac, puedes usar Network Link Conditioner.

Panel de preferencias del acondicionador de enlace de red

Puede simular varios casos de malas conexiones a Internet, incluidos Edge y 3G.

Además, puede crear sus propios perfiles con su propia configuración:

Perfiles personalizados del acondicionador de enlace de red

Es una descarga gratuita en Xcode (vaya a Xcode → Abrir herramienta de desarrollador → Más herramientas de desarrollador ... y descargue las herramientas de hardware IO para Xcode ).


Me gustan estas herramientas, pero necesito algo que pueda usar para las pruebas automatizadas. ¿Alguien sabe si hay una interfaz de línea de comando para esto?
Erik B

15

Si está en Linux, puede usar Netem para simular todos los posibles problemas con la red, como alta latencia, bajo ancho de banda, pérdida de paquetes y muchos otros.

Hay una opción para Windows llamada NetLimiter, pero no la he usado, así que no puedo responder.

Acabo de encontrar una aplicación para Mac llamada SlowlyApp .


1
-1 Al igual que con las otras respuestas. Esto es solo enlaces. Actualice la respuesta para incluir descripciones de lo que hacen las aplicaciones y cómo lo hacen.
MichaelHouse

8
@ Byte56: lo que hacen estas aplicaciones es simular una conexión de red lenta y / o poco confiable, tal como se hace en la pregunta. Estoy bastante seguro de cómo lo hacen está fuera del alcance de este sitio. Yo diría que esta es una respuesta perfectamente buena a la pregunta formulada; Si hay un problema, está en la pregunta, no en las respuestas.
Ilmari Karonen

1
Técnicamente, la pregunta es "¿Cómo puedo simular una mala conexión a Internet?". No solicita aplicaciones para hacerlo. Pero sí, creo que esta pregunta está fuera del alcance de este sitio.
MichaelHouse


7

¿Cómo puedo simular una mala conexión a Internet con alta latencia, bajo ancho de banda, jitter y pérdida ocasional de paquetes en un entorno local?

Si estás en Windows, puedes probar SoftPerfect Connection Emulator . Básicamente es un controlador que se inyecta entre su aplicación y la capa de red (similar a Wireshark / WinPCAP) para la NIC seleccionada y puede simular ancho de banda limitado, latencia, pérdida de paquetes y otras cosas. La interfaz de usuario es simple y directa.

Es un producto comercial, pero el juicio le permite hacer estallidos de "interferencia" de 30 segundos que deberían ser lo suficientemente buenos para que usted juzgue si esta herramienta hace lo que desea.

Otra opción multiplataforma es DummyNet , que se comporta de manera similar (a través de ipfw) pero es un poco menos fácil de usar.

Me gustaría probar cómo funciona la experiencia del usuario para alguien que no tiene una buena conexión con el servidor.

Creo que esta parte de la pregunta podría reformularse como "¿cómo trato con la latencia de red en mi aplicación?" Una técnica de uso común y efectiva es Dead Reckoning . El artículo vinculado lo explica mejor que yo, pero la idea básica es que sus clientes "simulen" dónde debería estar cada entidad y qué debería hacer mediante un algoritmo. Siempre que una entidad se desvía de este algoritmo (es decir, entrada del jugador, evento del lado del servidor, etc.), envía una actualización a cada cliente.


5

No lo he usado en mucho tiempo, pero he usado a Charles para probar esto. Es una aplicación con varias herramientas de diagnóstico de red, incluida la simulación de los problemas que mencionó: "una mala conexión a Internet con alta latencia, bajo ancho de banda, jitter y pérdida ocasional de paquetes"


1
A primera vista, parece que Charles es un tipo de proxy HTTP, por lo que no puede configurar el tráfico TCP o UDP. ¿Me estoy perdiendo de algo?
vbo

e incluso obtuvo +5, wft?
Marian Paździoch

No estoy seguro de lo que significa "dar forma al tráfico TCP o UDP", pero he usado esta herramienta precisamente para lo que el OP preguntó, simulando una mala conexión a Internet.
jhocking

1
@jhocking Significa que solo funciona para el tráfico HTTP. Muchos juegos en tiempo real usan TCP o UDP.
AaronLS

0

Si eres experto con Fiddler y solo estás interesado en HTTP / 1, puedes escribir esto.

Fiddler no es compatible con HTTP / 2, interceptar con él hará que todo el tráfico HTTP descienda a HTTP / 1.


Interesante. puedes darme mas detalles? Tal vez algún script de ejemplo?
Philipp

@Philipp Esta respuesta ( stackoverflow.com/a/47401557/442351 ) da un ejemplo.
BanksySan

¿Solo es compatible con http? ¿Ni siquiera los websockets? Entonces no creo que tenga mucha utilidad en el desarrollo de juegos. Si te preocupa la latencia, no estarías usando http en primer lugar. Pero gracias por mencionarlo de todos modos.
Philipp

@Philipp es compatible con WebSockets, solo HTTP / 2 caliente. Sin embargo, debe mirar HTTP / 2, no es nada como HTTP / 1, no más bloqueos de encabezado de línea, no más apretones de manos múltiples, no más encabezados duplicados y / o cookies.
BanksySan
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.