Simulando a conexão lenta com a Internet

188

Eu sei que isso é uma pergunta estranha. Como geralmente desenvolvo aplicativos com base na "suposição" de que todos os usuários têm uma conexão lenta à Internet. Mas, alguém acha que existe uma maneira de simular programaticamente uma conexão lenta à Internet, para que eu possa "ver" como um aplicativo funciona sob várias "velocidades de conexão"?

Não estou preocupado com o idioma usado. E não estou procurando exemplos de código nem nada, apenas interessado na lógica por trás disso.

Kara
fonte

Respostas:

109

Se você estiver executando o Windows, o Fiddler é uma ótima ferramenta. Ele possui uma configuração para simular a velocidade do modem e, para quem deseja mais controle, possui um plug-in para adicionar latência a cada solicitação .

Prefiro usar uma ferramenta como essa para inserir código de latência no meu aplicativo, pois é uma simulação muito mais realista, além de não me fazer projetar ou codificar os bits reais. O melhor código é o código que não preciso escrever.

ADICIONADO : Este artigo no blog de Pavel Donchev sobre Software Technologies mostra como criar velocidades simuladas personalizadas: Limitando a velocidade da sua conexão à Internet com o Fiddler .

Philip Rieck
fonte
6
Olá, escrevi um pequeno guia sobre como simular uma conexão lenta à Internet que pode ser útil: developertipoftheday.com/2010/12/… - divulgação completa - este é o meu próprio blog, mas, para o caso de ajudar, sou a favor da divulgação a boa palavra de violinista :-)
Alex KeySmith
O problema dessa abordagem de violinista é que a simulação de latência não é precisa, ela opera no nível de protocolo errado, para que você não possa simular corretamente o início lento.
Sam Saffron
@ SamSaffron, desculpe desenterrar um post antigo como este, mas você conhece outras ferramentas que ajudam na simulação de arranques lentos?
Anish Ramaswamy
@AnishRam melhor aposta é usar dummynet / ipfw que vem com o BSD e família, freebsd, osx etc barkingiguana.com/2009/12/04/...
Sam Saffron
@AnishRam Consulte também netem linuxfoundation.org/collaborate/workgroups/networking/netem pode simular várias condições usando o iproute2.
Philip Rieck
154

A partir do Chrome 38, você pode fazer isso sem nenhum plug-in. Basta clicar em inspecionar o elemento (ou F12tecla de atalho), clicar em "alternar mod do dispositivo" insira a descrição da imagem aquie você verá algo assim:

insira a descrição da imagem aqui

Entre muitos outros recursos, ele permite simular uma conexão específica à Internet (3G, GPRS)

PS para pessoas que tentam limitar a velocidade de upload. Infelizmente no momento atual não é possível.

PS2 agora você não precisa alternar nada. O painel de controle está disponível diretamente no painel de rede.insira a descrição da imagem aqui

Observe que, ao clicar em Sem limitação, você pode criar suas opções personalizadas de limitação.

insira a descrição da imagem aqui

Salvador Dalí
fonte
2
Agora, a otimização do Chrome Dev Tools limita a velocidade de download e upload. Mas apenas o limita para a página atual no Chrome, então você não pode usá-lo para testar sua página em outros navegadores. Para fazer isso, você precisa usar outras ferramentas como o Fiddler.
Leonid Vasilev
3
Vale ressaltar que, atualmente, WebSockets não são estrangulados desta forma: bugs.chromium.org/p/chromium/issues/detail?id=423246
mseddon
A otimização de upload não funcionou em algumas versões do Chrome, incluindo a mais recente (70.0). Há um relatório de bug no rastreador .
Matt
Na minha experiência, a maior causa de lentidão na Web é o DNS esquisito dos ISPs a cabo, incapaz de resolver servidores de anúncios ou CDNs. Às vezes, a página inteira permanece em branco até que a tentativa de resolvê-los seja bem-sucedida ou expire. O Chrome pode simular isso?
StackOverthrow
45

O Google recomenda :

Stin
fonte
1
O Condicionador de Link de Rede é mantido pela Apple (portanto, é estável e confiável), mas só se aplica ao simulador do Xcode.
Ben Wheeler
4
@BenWheeler Tentei sistema aplicado recentemente que está certamente sido ampla, mesmo localhost
aromero
2
Posso confirmar que o Network Link Conditioner é realmente aplicado a toda a pilha de rede.
22640 Fred Follmer
14

Em máquinas Linux, você pode usar wondershaper

apt-get install wondershaper

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

o {down} e o {up} são largura de banda em kpbs

Por exemplo, se você deseja limitar a largura de banda da interface eth1 para o uplink de 256kbps e o downlink de 128kbps,

$ sudo wondershaper eth1 256 128

Para limpar o limite,

$ sudo wondershaper clear eth1 
Ornitorrinco Anônimo
fonte
13

Eu estava usando http://www.netlimiter.com/ e funciona muito bem. Não apenas limita a velocidade para processos únicos, mas também mostra as taxas de transferência reais.

Piotr Müller
fonte
A maioria das outras ferramentas fornece controle de largura de banda via latência artificial, o que não parece acontecer com o netlimiter, o que é uma coisa boa. No entanto, no final, é uma ferramenta comercial (com uma versão de teste) e disponível apenas no Windows.
Aleksander Stelmaczonek
6

Existem proxies TCP por aí, como iprelay e Sloppy, que modelam a largura de banda para simular conexões lentas. Você também pode modelar a largura de banda e simular a perda de pacotes usando ferramentas de filtragem de IP, como ipfw e iptables.

hobbs
fonte
Obrigado, vou dar uma olhada no iprelay e Sloppy joe.
Obrigado, ipfw funciona muito bem. Aqui está um guia rápido que eu vi que foi útil: barkingiguana.com/2009/12/04/…
Eric Nguyen
4

Você pode experimentar o Dummynet , ele simula limitações de fila e largura de banda, atrasos, perdas de pacotes e efeitos de caminhos múltiplos

tszming
fonte
4

Use um proxy de depuração da web com recursos de otimização, como Charles ou Fiddler .

Você os encontrará desenvolvimento web útil em geral. A principal diferença é que Charles é shareware, enquanto o Fiddler é gratuito.

Ben M
fonte
Você o executa como um proxy. O navegador se conecta automaticamente a ele e encaminha solicitações para seu aplicativo Web.
Ben M
Para o Fiddler, ele possui os dois modos de trabalhar dentro / fora do navegador.
Ken D
4

Além disso, para simular uma conexão lenta em alguns * nixes, você pode tentar usar o ipfw . Mais informações são fornecidas pela resposta de Ben Newman nesta pergunta do Quora

Ehtesh Choudhury
fonte
2

Use uma ferramenta como o TCPMon . Pode simular uma conexão lenta.

Basicamente, você solicita exatamente a mesma coisa e apenas encaminha a mesma solicitação ao servidor real e atrasa a resposta apenas com a quantidade definida de bytes.

pickypg
fonte
2

Você pode usar o NetEm (emulação de rede) como um servidor proxy para emular muitas características da rede (velocidade, atraso, perda de pacotes etc.). Controla a rede usando o iproute2 pacote e é ativado no kernel da maioria das distribuições Linux.

É controlado pelo tcaplicativo de linha de comando (do pacote iproute2 ), mas também existem algumas GUIs da interface da web para NetEm, por exemplo, PHPnetemGUI2 .

A vantagem é que, como escrevi, ele pode simular não apenas velocidades diferentes da rede, mas também, por exemplo, perda de pacotes, duplicação e / ou corrupção, atraso aleatório ou definido etc., para que você possa emular várias redes com desempenho ruim.

Para seu aplicativo, é absolutamente transparente, você pode configurar o sistema operacional para usar o servidor proxy NetEm, para que todas as conexões dessa máquina passem pelo NetEm. Ou você pode configurar apenas seu aplicativo para usá-lo como proxy.

Eu tenho usado para testar o desempenho de um aplicativo Android em várias redes de baixo desempenho emuladas.

David Ferenczy Rogožan
fonte
1

O Mac OSX, desde a versão 10.10, possui um aplicativo chamado Murus Firewall , que atua como uma interface gráfica para o pf, o substituto do ipfw.

Funciona muito bem para a otimização em todo o sistema ou em domínios específicos. Eu era capaz de usá-lo para deslizar minha velocidade de download entre 300Kbps e 30Mbps para testar como um player de vídeo em fluxo se ajusta.

Ben Wheeler
fonte
0

Há também outra ferramenta chamada WIPFW - http://wipfw.sourceforge.net/

É um pouco antiquado, mas você pode usá-lo para simular uma conexão mais lenta. É baseado no Windows, e a ferramenta permite ao administrador monitorar quanto tráfego o roteador está recebendo de uma determinada máquina ou quanto tráfego da WWW está encaminhando, por exemplo.

Deano
fonte
0

A atualização (9 anos após a solicitação) como resposta que eu estava procurando não foi mencionada:

O Firefox também possui predefinições para acelerar as velocidades de conexão. Encontre-os na guia Monitor de rede das ferramentas do desenvolvedor. O padrão é 'Sem aceleração'.

O mais lento é GPRS ( velocidade de download: 50 Kbps, velocidade de upload: 20 Kbps, latência mínima (ms): 500 ), variando de 'bom' e 'regular' 2G, 3G e 4G a DSL e WiFi ( velocidade de download: 30Mbps, upload velocidade: 15 Mbps, latência mínima (ms): 2 ).

Mais nos documentos do Dev Tools .

lazysoundsystem
fonte
0

Para Linux, a seguinte lista de documentos pode ser útil:

Pessoalmente, enquanto o Dummynet é bom, acho o NetEm o mais versátil para meus casos de uso; Geralmente, estou interessado no efeito de atrasos, em vez da largura de banda (ou seja, problemas de conexão WiFi), e é super fácil emular a perda / corrupção aleatória de pacotes, etc. É também muito acessível e gratuito (ao contrário do Linktropy baseado em hardware )

Em uma nota lateral, para Windows, Clumsy é incrível. Gostaria também de acrescentar que a otimização do navegador (em sites) não é um método preciso para simular problemas de rede da vida real (acho que o "TKK" comentou algumas das razões pelas quais acima).

Espero que isso ajude alguém!

Eugene
fonte
0

Um caso comum de moldar uma única conexão TCP pode realmente ser montado a partir de pares duplos socate do cpipemodo UNIX, assim:

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

Isso simula uma conexão com largura de banda de cerca de 300kb / s de seu serviço de :5000e para em aproximadamente 10 KB / s e escutas sobre :5555as conexões de entrada. Advertência : Observe que essa conexão por conexão faz com que cada conexão TCP individual obtenha esse valor.

Explicação: A parte externa (esquerda) socatouve com as opções fornecidas :5555como um servidor de bifurcação. O primeiro cpipecomando da SYSTEM:...opção limita os dados inseridos no soquete: 5555 (e sai do primeiro, externo socat) para no máximo 10kByte / s. Esses dados são então encaminhados usando outro socatque se conecta localhost:5000(onde o serviço que você deseja diminuir a velocidade deve estar ouvindo). Os dados de localhost:5000 são então colocados no cpipecomando certo , que (com os valores fornecidos) os acelera para cerca de 300kB / s.

A opção -ngrpara cpipeé importante. Isso faz com que o cpipe leia não avidamente de seu descritor de arquivo de entrada. Caso contrário, você poderá ficar com os dados nos buffers que não estão sendo encaminhados e aguardando uma resposta.

Usando a bufferferramenta mais comum em vez decpipeÉ provável que também seja possível .

(Créditos: baseia-se na receita "tee duplo" de Christophe Loor da socatdocumentação)

onno
fonte