Como posso simular uma conexão ruim à Internet para fins de teste?

105

Estou desenvolvendo um jogo multiplayer online. Funciona bem quando eu o testo na rede local, mas antes de liberá-lo, gostaria de testar como a experiência do usuário funciona para alguém que não tem uma conexão tão boa com o servidor. Como posso simular uma conexão de Internet ruim com alta latência, baixa largura de banda, instabilidade e perda ocasional de pacotes em um ambiente local?

Philipp
fonte
69
Envie para mim para teste! As conexões no meu país são horríveis por padrão.
30513 Stephan Stephan
7
Um objetivo louvável. Eu gostaria que os estúdios publicados fizessem o mesmo. Epic Games, estou olhando para você.
Gusdor
7
Encontre um amigo próximo que usa Comcast ...
WernerCD
12
A simulação de uma conexão ruim à Internet contém as respostas atuais e muito mais.
MichaelHouse
2
Pensei imediatamente essa outra questão recente SE: superuser.com/questions/637594/...
Patrick M

Respostas:

63

Eu acho que Dummynet é o que você está procurando. O Dummynet é uma ferramenta de emulação de rede que pode simular limitações de largura de banda, atrasos, perdas de pacotes e muito mais. Você pode escolher facilmente qual tráfego deseja interceptar e configurar as limitações, por exemplo, limitar todo o tráfego TCP recebido a 2 Mbits / s.

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

Você vê que a seleção de tráfego é feita pelo firewall ipfw conhecido e os pipes fornecem os recursos de limitação.

Está disponível para FreeBSD, Linux e Windows.

Marc Bury
fonte
funciona com o adaptador de loopback do Windows?
Andriy Tylychko
para responder à minha própria pergunta, não, ele não funciona para mim no Windows 8.1, mesmo depois de eu desativada reforço driver assinado
Andriy Tylychko
@AndyT Você encontrou algo que funciona com loopback? Encontrar algo que empacote E trabalhe com loopback parece difícil.
AaronLS
@AaronLS: veja outra resposta aqui: gamedev.stackexchange.com/a/100779/4731
Andriy Tylychko:
33

Condicionador de Link de Rede

Se você estiver em um Mac, poderá usar o Condicionador de Link de Rede.

Painel Preferências do Condicionador de Link de Rede

Você pode simular vários casos de conexões ruins à Internet, incluindo Edge e 3G.

Além disso, você pode criar seus próprios perfis com suas próprias configurações:

Perfis personalizados do condicionador de link de rede

É um download gratuito no Xcode (vá para Xcode → Abrir ferramenta de desenvolvedor → Mais ferramentas de desenvolvedor ... e faça o download das Ferramentas de IO de hardware para Xcode ).

grg
fonte
Gosto dessas ferramentas, mas preciso de algo que possa ser usado para testes automatizados. Alguém sabe se existe uma interface de linha de comando para isso?
Erik B
15

Se você estiver no Linux, poderá usar o netem para simular todos os possíveis problemas com a rede, como alta latência, baixa largura de banda, perda de pacotes e muitos outros.

Existe uma opção para o Windows chamada NetLimiter, mas eu não a usei, portanto não posso atestar isso.

Acabei de encontrar um aplicativo para Mac chamado SlowlyApp .

Martin Tale
fonte
1
-1 Como nas outras respostas. Isto são apenas links. Atualize a resposta para incluir descrições do que os aplicativos fazem e como eles fazem.
MichaelHouse
8
@ Byte56: O que esses aplicativos fazem é simular uma conexão de rede lenta e / ou não confiável, exatamente como a pergunta pede. Tenho certeza de que eles fazem isso fora do escopo deste site. Eu diria que esta é uma resposta perfeitamente boa para a pergunta, conforme solicitado; se houver um problema, está na pergunta, não nas respostas.
Ilmari Karonen
1
Tecnicamente, a pergunta é "Como posso simular uma conexão ruim à Internet". Ele não solicita aplicativos para isso. Mas sim, acho que esta questão está fora do escopo deste site.
MichaelHouse
9

Desajeitado , para Windows Vista e 7.

desajeitado

user2818782
fonte
funciona bem para Windows 8.1 em loopback
Andriy Tylychko
Não se esqueça de executar como administrador. Ou silenciosamente não faz nada. Caso contrário, ótima ferramenta.
Neolisk 5/09
7

Como posso simular uma conexão de Internet ruim com alta latência, baixa largura de banda, instabilidade e perda ocasional de pacotes em um ambiente local?

Se você estiver no Windows, tente o SoftPerfect Connection Emulator . É basicamente um driver que se injeta entre o aplicativo e a camada de rede (semelhante ao Wireshark / WinPCAP) para a NIC selecionada e pode simular largura de banda, latência, perda de pacotes e outras coisas limitadas. A interface do usuário é simples e direta.

É um produto comercial, mas o teste permite que você faça rajadas de 30 segundos de "interferência" que devem ser boas o suficiente para você julgar se essa ferramenta faz o que você deseja.

Outra opção de plataforma cruzada é o DummyNet , que se comporta de maneira semelhante (via ipfw), mas é um pouco menos fácil de usar.

Eu gostaria de testar como a experiência do usuário funciona para alguém que não tem uma conexão tão boa com o servidor.

Eu acho que essa parte da pergunta pode ser reapresentada como "como eu lido com a latência da rede no meu aplicativo?" Uma técnica comumente usada e eficaz é o Dead Reckoning . O artigo vinculado explica melhor do que eu posso, mas a idéia básica é que seus clientes "simulem" onde cada entidade deve estar e o que deve estar fazendo por um algoritmo. Sempre que uma entidade se desvia desse algoritmo (por exemplo, entrada do jogador, evento do servidor etc.), ela envia uma atualização para cada cliente.

Justin ᚅᚔᚈᚄᚒᚔ
fonte
5

Não uso há algum tempo, mas usei Charles para testar isso. É um aplicativo com várias ferramentas de diagnóstico de rede, incluindo a simulação dos problemas mencionados: "uma conexão ruim à Internet com alta latência, baixa largura de banda, tremulação e perda ocasional de pacotes"

jhocking
fonte
1
À primeira vista, parece que Charles é um tipo de proxy HTTP, por isso não pode moldar o tráfego simples de TCP ou UDP. Estou esquecendo de algo?
vbo
e ainda tem +5, wft?
Marian Paździoch
er Não sei ao certo o que significa "forma o tráfego simples de TCP ou UDP", mas usei essa ferramenta exatamente para o que o OP perguntou, simulando uma conexão ruim à Internet.
Jhocking
1
@jhocking Ele quer dizer que só funciona para tráfego HTTP. Muitos jogos em tempo real usam TCP ou UDP.
precisa saber é o seguinte
0

Se você é conhecedor do Fiddler e está interessado no HTTP / 1, pode criar um script para isso.

O Fiddler não suporta HTTP / 2, a interceptação fará com que todo o tráfego HTTP faça o downgrade para HTTP / 1.

BanksySan
fonte
Interessante. Você pode fornecer mais detalhes? Talvez algum script de exemplo?
Philipp
@ Philip Esta resposta ( stackoverflow.com/a/47401557/442351 ) dá um exemplo.
BanksySan
Ele suporta apenas http? Nem mesmo websockets? Então eu não acho que tenha muita utilidade no desenvolvimento de jogos. Se você se preocupa com a latência, não deve usar o http em primeiro lugar. Mas obrigado por mencioná-lo de qualquer maneira.
Philipp
@ Philipp suporta WebSockets, apenas HTTP / 2 quente. No entanto, você deve olhar para o HTTP / 2, não é nada como HTTP / 1, sem mais bloqueios de linha de frente, sem mais handshakes, sem mais cabeçalhos e / ou cookies duplicados.
BanksySan