Tenho alguns terminais clientes q acessam um servidor java e se comunicam por socket, com um protocolo enxuto e bem leve. A internet nesses terminais nao é das melhores, mas não é tão ruim. Acontece q, a impressão q tenho, é q a demora não depende da banda de internet, mas do tempo q a requisição demora pra chegar no servidor. Quais os conselhos? devo olhar a estrutura de rede? na minha casa, qdo rodo o programa, em outra cidade, o programa é um pouco mais lento q na rede interna, mas pouco, depois de iniciado é quase imperceptível. Lá, rodo todo o sistema com a internet inclusive de um mesmo provedor… e está bem lento!
posso estar falando asneira, mas nao manjo nada dessa parte, se alguem puder ajudar, manda ae!
Como é que você sabe que isso é enxuto e leve? Se seu protocolo é conversacional (ou seja, para qualquer coisinha que você precisa fazer, é preciso fazer múltiplas requisições e esperar múltiplas respostas), isso não vai ser enxuto nem leve.
Existem duas coisas que podem gerar lentidão na internet:
Tempo de resposta (LAG): Que é mais perceptível em aplicações que comunicam-se com pacotes pequenos de dados, mas muito frequentes, como os MMO-RPGs;
Banda: Que é mais perceptível quando você faz um download;
Então como o bezier curve falou, você pode ter um protocolo que em termos de banda seja enxuto e leve, mas em termos de requisições de dados seja pesado, dependendo fortemente de tempos de respostas curtos.
O meu caso é o primeiro, as resquisições são leves, mas qdo tenho muitas em sequencia, a demora d uma se soma a outra… estou tentando agrupar tudo em menos comandos.
Mas há algo, nesse caso, que se possa fazer para melhorar o desempenho?
valeu por enquanto!
[quote=zerokelvin]O meu caso é o primeiro, as resquisições são leves, mas qdo tenho muitas em sequencia, a demora d uma se soma a outra… estou tentando agrupar tudo em menos comandos.
Mas há algo, nesse caso, que se possa fazer para melhorar o desempenho?[/quote]
Se você pode alterar o protocolo, reduzir o número de requisições e confirmações é, certamente, o primeiro passo para melhorar o tempo de resposta.
Se for possível para você agrupar requisições e fazer com que o servidor só confirme o pacote todo uma única vez, melhor.
Outras soluções para disfarçar lags geralmente são dependentes do perfil da aplicação em si.
Coisas comuns incluem usar UDP e um protocolo com menos confirmação (geralmente, quando pode-se dar ao luxo de perder pacotes e você tem a aplicação cliente mais em tempo real), ou mesmo, permitir que o cliente tome decisões que o servidor normalmente tormaria, já dê o feedback ao usuário, e depois só se sincronize com o servidor, mesmo que ele tenha que se corrigir se necessário. Mas não creio que nenhuma das duas hipóteses se adapte a uma aplicação comum.
Finalmente, fazer caches no cliente pode ser uma boa opção. Se ele pode mostrar uma informação antiga, antes de exibir uma nova, sem qualquer tipo de requisição do servidor, melhor. Talvez essa informação já sirva para seu usuário, e ele nem sequer precise esperar a navegação dos pacotes.
Enfim, disfarçar lag exige calma e analisar caso-a-caso. E nem sempre será possível. Aí não tem escapatória, a não ser contratar um serviço de rede melhor.
Pense na Internet lenta como sendo um office-boy que você manda ao banco. Se puder, arranje um velhinho (para ele pegar a fila dos idosos e ele poder ir mais rápido) e mande-o levar um monte de contas a pagar de uma vez. Já que vai demorar mesmo, melhor que ele seja bastante produtivo.
huahauhauhauahuhuaahu melhor analogia nao existe… mas tá resolvido.
Além disso, vou criar um server local pro cache… hj ainda estive num dos pontos, e vi uma maluquice: três roteadores, em sequencia hehehehehe… pra 1 ponto de net, deve ter umas 20 maquinas… então vou criar um servidor pro cache local, pq as clientes fazem requisções de mesmo objeto, configuro algo apenas q comunique as modificações, se houver, vindo do servidor pro servidor local…