Estou testando um aplicativo Android e preciso entender como o aplicativo se comporta em diferentes velocidades da Internet. Um exemplo de caso de teste é: 1. defina a largura de banda máxima para 20kbps e verifique como funciona; 2. defina a largura de banda máxima para 50kbps e verifique como funciona ... etc.
O problema é - não tenho idéia de como limitar o tráfego.
Estou usando o WiFi e o Charles Proxy . Eu uso Charles para verificar como o aplicativo reage. Infelizmente, não consigo acelerar o uso do Charles - por algum motivo, os limites de Charles não afetam meu aplicativo.
Enfim, alguém pode me ajudar com esse problema? Você tem alguma idéia de como limitar a largura de banda?
Desde já, obrigado.
Respostas:
PARA DISPOSITIVO ROOTED (copiado da resposta de Mansour nesta postagem )
Edição nº 1:
Explicação:
Os dados são divididos em pequenas partes, chamadas pacotes, a serem transmitidas pela rede.
Pode ser transmitido usando TCP (Transmission Control Protocol) ou UDP (User Datagram Protocol)
Vamos dar um exemplo:
Suponha que você seja o servidor e eu sou o host e desejo fazer o download de um arquivo. Primeiro, enviarei uma solicitação, após o que você processará e, em vez de enviar o arquivo inteiro, dividirá o arquivo grande em pacotes pequenos.
Agora, cada pacote criado conterá informações como IP de origem (seu) e IP de destino (meu), juntamente com alguns dados adicionais (número de sequência, tamanho dos dados, tempo de vida, etc.)
Você vai enviar esses pacotes e eles podem me alcançar através de roteadores. Não é necessário que todos os pacotes tenham que chegar até mim pela mesma rota. Eles podem vir até mim através de diferentes rotas disponíveis.
Quando eles me alcançam, o TCP / UDP aparece em cena.
Se você usou o TCP para transmissão, quando um pacote chega até mim, uma confirmação informando que o pacote chegou até mim é enviada de volta para você.
Este recurso está ausente no UDP. Se você usou o UDP, diferentemente do TCP, ele não envia confirmações para você. Isso significa que você, como servidor, não tem idéia se os pacotes estão chegando ou não. No caso de se perder na transmissão, se perde para sempre.
Descartando pacotes
Descartar pacotes significa descartar pacotes. Então, basicamente, quando eu largar o pacote enviado por você, uma confirmação será enviada a você (no caso do TCP) de que o pacote foi perdido na transmissão; portanto, você precisará enviá-lo novamente.
Dessa maneira, desperdiça tráfego e limita a velocidade ao mesmo tempo em que recebo o arquivo inteiro.
Se eu soltar pacotes UDP, não receberei o arquivo inteiro. Essa é a razão pela qual o aplicativo não controla o tráfego UDP.
E sim, o privilégio root é obrigatório, pois o iptable pode ser acessado apenas com acesso de superusuário.
fonte
Se você estiver no mac os x, poderá usar o "Network Link Conditioner".
Você pode instalá-lo no xcode em:
Xcode> Open Developer Tool> Mais ferramentas de desenvolvedor
Ele abrirá uma página da Web de recursos da Apple (pode ser necessário fazer login). Na lista de recursos, procure as mais recentes "Hardware IO Tools" e faça o download. Em seguida, instale o "Network Link Conditioner", ele adicionará uma opção no seu painel de preferências do mac.
A idéia é colocar o seu Mac na Ethernet. Compartilhe sua conexão no wifi. Limite o tráfego com o Network Link Conditionner. E conecte seu android no seu mac wifi.
editar: parece que o squid-cache suporta a otimização da rede. http://www.tldp.org/HOWTO/Bandwidth-Limiting-HOWTO/index.html
fonte
Você pode controlar a largura de banda com o seu roteador (se for compatível).
fonte