O que é latência?
Resposta do Yahoo.
Em redes, latência é o alto tempo de resposta que um pacote demora para ir até uma determinada rede e voltar. Se a latência existe, significa que seus dados demoram muito para chegar a um destino e voltarem para seu computador.
Exemplo: Você digita a senha para entrar no Yahoo. Seus dados saem da sua rede, vão até o servidor do Yahoo, são computados lá e voltam. Se a rede tem latência, vai demorar uns 30 segundos para entrar no Yahoo. Se não tem latência, em 5 segundos seu Yahoo abre.
A Internet no Brasil tem latência devido à infraestrutura das operadoras ser obsoleta para a quantidade de pessoas na Internet no século XXI, a exemplo de nossas estradas.
Wikipédia: Lag
Lag (Latency at game, em português: latência no jogo) é uma palavra em inglês que se refere a atrasos que se podem experimentar na comunicação entre computador (internet, por exemplo), podendo aplicar-se a outras situações, como comunicação via satélite ou mesmo em comunicação escrita.
Em computação, lag refere-se ao tempo que um pacote de dados leva a partir de um computador local até ao seu destino e, depois, de volta.
O efeito do lag é verificável quando vemos, por exemplo, um jornalista no exterior, ao vivo, leva algum tempo a responder às perguntas que lhe são feitas no estúdio. Isso provoca uma reação desagradável nos espectadores.
Em MMORPGs, lag é o elevado período de tempo em que o computador do usuário fica atrasado em relação ao servidor principal, devido à baixa taxa de transferência da conexão ou excesso de pessoas no servidor. Mas geralmente o LAG ocorre devido a distância entre o remetente e o destinatário do pacote de dados, já que, quanto maior a distância, maior o tempo o pacote demorará a chegar ao destino. Também deve-se à baixa taxa de transferência da conexão local ou então porque outros computadores dessa rede estão a ocupar bastante conexão tornando esta mais lenta.
O motivo deste tópico adiantado é por causa de uma pergunta da "Sarah" e de vários outros usuários, que ainda não entende muito bem desse assunto.
Upload
Vou tentar usar um exemplo com uma caixa d'água.
Vamos adicionar um cano e depois jogar um pouco de água dentro da caixa.
O cano é a saída de dados, o upload. E a água são as informações que serão enviadas.
Vamos simular uma única conexão entre Servidor e Cliente. Com as seguintes informações:
Upload Máximo do Servidor: 70 KB/S. (Tamanho do cano)
Informações a serem enviadas: 32 KB. (Quantidade de água)
O upload (cano), consegue jogar sua informação (água) para fora a 70 Kilobytes por segundo. Então, com 32 Kilobytes de informação (água), não teria nenhum problema, sobraria metade do upload (cano) disponível.
Se adicionar mais 1 cliente ao servidor, cada um usando 32 Kilobytes de informação (água) seria 64 Kilobytes de informação (água) sendo enviado (upload) e ainda teria 6 KB upload (cano) disponível 6 KB.
Se adicionar mais 1 cliente ao servidor, a história aqui muda totalmente.
Na imagem acima, a quantidade de água aumentou, ou seja, com mais clientes, mais dados.
Agora a saída (cano) de dados está entupida de informações (água).
Cliente 1 usa 32 KB de upload (cano).
Cliente 2 usa 32 KB de upload (cano).
Cliente 3 usa 6 KB de upload (cano).
Aqui chega a parte em que eu posso estar enganado, rizos!
Mas não é bem isso que acontece, a informação (água) é dividida para ser entregue igualmente:
Cliente 1 usa 23,3 KB de upload (cano).
Cliente 2 usa 23,3 KB de upload (cano).
Cliente 3 usa 23,3 KB de upload (cano).
Então, em vez de enviar a informação (água) por completo, enviou uma pequena parte para que possa atender a todos os clientes e, no próximo segundo irá enviar o restante. Com 3 clientes, tudo bem, agora com mais clientes, se for em um jogo, o LAG será um pouco desconfortável.
Obs: O cano joga informação (água) para fora a cada segundo.
Esse é um dos motivos do lag acontecer, não da pra saber exatamente quanto de informação uma engine usa, pode estar entre 5 e 10 kb/s, pois a maior parte das informações são enviadas quando um jogador entra no jogo, o servidor envia o mapa, items, npc, jogadores, lojas, animações, spells e etc.
Distância
Outra coisa que o pessoal não sabe, não depende apenas de ter uma conexão boa, distância também conta.
Tenho um servidor no Brasil e minha latência é de 450, por quê?
Tenho um servidor no exterior e minha latência é de 200, por quê?
A distância também conta mas, você deve analisar por onde os seus dados trafegam até chegar no cliente.
Os pontos de cor rosa, são os servidores, o ponto verde é o cliente, a linha vermelha é o trajeto do dados, e os de cor azul, são onde as informações passam antes de chegar no cliente.
A latência no servidor brasileiro é maior, porque ele não tem uma conexão direta com o cliente, ele passa por exemplo, primeiro na Colombia, Peru, Bolivia, Chile e depois chegar no cliente.
O servidor do exterior já tem uma conexão quase direta com o cliente, os dados chegam por exemplo, primeiro em Brasilia e depois é enviado ao cliente.
Usando a ferramenta tracert (traceroute), serve para identificar todo o caminho que você percorre até chegar ao servidor. Isso mostra todos os locais que você passou até chegar em determinado servidor.
Se você joga com Aion, ou algum outro jogo você pode ter problemas com lag. Uma solução para isso é o DirectIP, alguem aqui deve conhecer directip.com.br.
O DirectIP cria uma conexão VPN com algum servidor especificado no programa.
O servidor do jogo, entrega os dados para o servidor do DirectIP, e então, o servidor do DirectIP envia os dados por meio de uma conexão direta para o cliente.
O cliente envia os dados para o servidor do DirectIP por meio da conexão direta, e o servidor do DirectIP se encarrega de enviar os dados para o servidor do jogo.
(O_O')
O Game Loop, Quantidade de jogadores e o Processador
Imagine um armário com 10 gavetas, quanto tempo você demoraria para abrir cada gaveta, checar se há algum curriculum e fechar a gaveta e dizer o resultado?
Com 10 gavetas é fácil, você pode fazer em cada uma em 2.5 segundos, abrir a gaveta, ver se há um curriculum, fechar a gaveta e dizer a resposta para o seu chefe.
E se fosse um computador que verificasse isso tudo? Quanto tempo ele levaria para fazer isso?
Para 10 gavetas? Milésimos de segundos para processar e enviar a apresentar a resposta para o chefe.
O servidor é responsável por ditar as ações do mapa e dos npc entre várias outras coisas.
O servidor está sempre verificando se o NPC deve andar pra direta, esquerda, falar, atacar, estar morto, perseguir o personagem, atacar o personagem e etc.
Verificar cada pessoa que está no jogo, fazer a regeneração de HP e MP, calcular o ataque de um poder e muito mais.
Enquanto o servidor está aberto, este ciclo é repetido infinitas vezes até que o servidor seja fechado, isso é o que da 'vida' ao conteúdo do jogo.
Normalmente, não há como saber quantas vezes esse ciclo é executado por segundo precisamente em uma engine. Podemos ter uma base de: mais de 60 vezes por segundo.
Isso mesmo, o servidor verifica se o NPC está morto mais de 60 vezes por segundo, verifica também, se é o momento certo para recuperar a energia de um jogador.
1 armário com 10 gavetas? 25 segundos para eu verificar todas.
1 servidor com 10 jogadores? 1 segundo para verificar 60 vezes cada jogador e todo o jogo.
1 armário com 20 gavetas? 50 segundos para eu verificar todas.
1 servidor com 20 jogadores? 1 segundo para verificar 60 vezes cada jogador e todo o jogo.
A diferença é que o computador faz cálculos em milésimos de segundos, isso poderia ter uma diferença significativa se estivesse 200 jogadores online. Com 200 jogadores, poderíamos dar um palpite de 1 segundo para o servidor verificar 10 vezes cada jogador e o jogo todo.
200 jogadores, 1 segundo para verificar 10 vezes o jogador e todo o jogo, isso está um pouco bom, quer dizer que o servidor ainda está dando conta.
Agora, vamos aumentar para 400 jogadores.
400 jogadores, 2 segundos para verificar 1 vez o jogador e todo o jogo. Pronto, aqui já podemos ver que teremos lag. Um exemplo clássico é atacar o NPC e receber o resultado do ataque 2 segundos depois, pois o servidor demorou para processar e enviar a resposta, enquanto você estava tentando atacar, ele estava cuidando do ataque de outro jogador e não teve o tempo suficiente para processar sua vez, você ficou em segundo plano.
Aqui entra o processador, ele quem faz os cálculos, um processador forte (bombado e lindo) pode dar conta de processar todos esses usuários sem nenhum problema e manter o bom estado do jogo.
Obs: O que eu disse acima é tudo teoria, lógico que, essas coisas realmente acontecem mas não é nessa ordem dos "números", varia muito de processador, linguagem e de como a engine foi programada e para qual finalidade.
Quantidade de Jogadores e Memória
Quando você declara uma variável, onde é armazenado o valor? Na memória, exato.
Quando um novo jogador se conecta ao jogo, onde são armazenado seus dados para uso? Na memória.
Quanto mais jogadores jogando, mais memoria em uso, a quantidade de memória usada vária de como foi programado a engine. Isso não é um grande motivo para se preocupar com a memória do PC, só tente deixar uma boa quantidade dísponível para o servidor.
Como pode ver, a latência e a quantidade de jogares depende de vários fatores. Como o GoldSlash disse: "Um assunto puxa o outro", ficaria complicado as coisas por aqui. No tópico, eu tentei usar o conhecimento que adquiri e explicar simplificadamente como acontece essas coisas.
Se alguém tiver dúvidas, sugestões ou que queira acrescentar conteúdo ao tópico, deixe comentários.
Resposta do Yahoo.
Em redes, latência é o alto tempo de resposta que um pacote demora para ir até uma determinada rede e voltar. Se a latência existe, significa que seus dados demoram muito para chegar a um destino e voltarem para seu computador.
Exemplo: Você digita a senha para entrar no Yahoo. Seus dados saem da sua rede, vão até o servidor do Yahoo, são computados lá e voltam. Se a rede tem latência, vai demorar uns 30 segundos para entrar no Yahoo. Se não tem latência, em 5 segundos seu Yahoo abre.
A Internet no Brasil tem latência devido à infraestrutura das operadoras ser obsoleta para a quantidade de pessoas na Internet no século XXI, a exemplo de nossas estradas.
Wikipédia: Lag
Lag (Latency at game, em português: latência no jogo) é uma palavra em inglês que se refere a atrasos que se podem experimentar na comunicação entre computador (internet, por exemplo), podendo aplicar-se a outras situações, como comunicação via satélite ou mesmo em comunicação escrita.
Em computação, lag refere-se ao tempo que um pacote de dados leva a partir de um computador local até ao seu destino e, depois, de volta.
O efeito do lag é verificável quando vemos, por exemplo, um jornalista no exterior, ao vivo, leva algum tempo a responder às perguntas que lhe são feitas no estúdio. Isso provoca uma reação desagradável nos espectadores.
Em MMORPGs, lag é o elevado período de tempo em que o computador do usuário fica atrasado em relação ao servidor principal, devido à baixa taxa de transferência da conexão ou excesso de pessoas no servidor. Mas geralmente o LAG ocorre devido a distância entre o remetente e o destinatário do pacote de dados, já que, quanto maior a distância, maior o tempo o pacote demorará a chegar ao destino. Também deve-se à baixa taxa de transferência da conexão local ou então porque outros computadores dessa rede estão a ocupar bastante conexão tornando esta mais lenta.
O motivo deste tópico adiantado é por causa de uma pergunta da "Sarah" e de vários outros usuários, que ainda não entende muito bem desse assunto.
Upload
Vou tentar usar um exemplo com uma caixa d'água.
Vamos adicionar um cano e depois jogar um pouco de água dentro da caixa.
O cano é a saída de dados, o upload. E a água são as informações que serão enviadas.
Vamos simular uma única conexão entre Servidor e Cliente. Com as seguintes informações:
Upload Máximo do Servidor: 70 KB/S. (Tamanho do cano)
Informações a serem enviadas: 32 KB. (Quantidade de água)
O upload (cano), consegue jogar sua informação (água) para fora a 70 Kilobytes por segundo. Então, com 32 Kilobytes de informação (água), não teria nenhum problema, sobraria metade do upload (cano) disponível.
Se adicionar mais 1 cliente ao servidor, cada um usando 32 Kilobytes de informação (água) seria 64 Kilobytes de informação (água) sendo enviado (upload) e ainda teria 6 KB upload (cano) disponível 6 KB.
Se adicionar mais 1 cliente ao servidor, a história aqui muda totalmente.
Na imagem acima, a quantidade de água aumentou, ou seja, com mais clientes, mais dados.
Agora a saída (cano) de dados está entupida de informações (água).
Cliente 1 usa 32 KB de upload (cano).
Cliente 2 usa 32 KB de upload (cano).
Cliente 3 usa 6 KB de upload (cano).
Aqui chega a parte em que eu posso estar enganado, rizos!
Mas não é bem isso que acontece, a informação (água) é dividida para ser entregue igualmente:
Cliente 1 usa 23,3 KB de upload (cano).
Cliente 2 usa 23,3 KB de upload (cano).
Cliente 3 usa 23,3 KB de upload (cano).
Então, em vez de enviar a informação (água) por completo, enviou uma pequena parte para que possa atender a todos os clientes e, no próximo segundo irá enviar o restante. Com 3 clientes, tudo bem, agora com mais clientes, se for em um jogo, o LAG será um pouco desconfortável.
Obs: O cano joga informação (água) para fora a cada segundo.
Esse é um dos motivos do lag acontecer, não da pra saber exatamente quanto de informação uma engine usa, pode estar entre 5 e 10 kb/s, pois a maior parte das informações são enviadas quando um jogador entra no jogo, o servidor envia o mapa, items, npc, jogadores, lojas, animações, spells e etc.
Distância
Outra coisa que o pessoal não sabe, não depende apenas de ter uma conexão boa, distância também conta.
Tenho um servidor no Brasil e minha latência é de 450, por quê?
Tenho um servidor no exterior e minha latência é de 200, por quê?
A distância também conta mas, você deve analisar por onde os seus dados trafegam até chegar no cliente.
Os pontos de cor rosa, são os servidores, o ponto verde é o cliente, a linha vermelha é o trajeto do dados, e os de cor azul, são onde as informações passam antes de chegar no cliente.
A latência no servidor brasileiro é maior, porque ele não tem uma conexão direta com o cliente, ele passa por exemplo, primeiro na Colombia, Peru, Bolivia, Chile e depois chegar no cliente.
O servidor do exterior já tem uma conexão quase direta com o cliente, os dados chegam por exemplo, primeiro em Brasilia e depois é enviado ao cliente.
Usando a ferramenta tracert (traceroute), serve para identificar todo o caminho que você percorre até chegar ao servidor. Isso mostra todos os locais que você passou até chegar em determinado servidor.
Se você joga com Aion, ou algum outro jogo você pode ter problemas com lag. Uma solução para isso é o DirectIP, alguem aqui deve conhecer directip.com.br.
O DirectIP cria uma conexão VPN com algum servidor especificado no programa.
O servidor do jogo, entrega os dados para o servidor do DirectIP, e então, o servidor do DirectIP envia os dados por meio de uma conexão direta para o cliente.
O cliente envia os dados para o servidor do DirectIP por meio da conexão direta, e o servidor do DirectIP se encarrega de enviar os dados para o servidor do jogo.
(O_O')
O Game Loop, Quantidade de jogadores e o Processador
Imagine um armário com 10 gavetas, quanto tempo você demoraria para abrir cada gaveta, checar se há algum curriculum e fechar a gaveta e dizer o resultado?
Com 10 gavetas é fácil, você pode fazer em cada uma em 2.5 segundos, abrir a gaveta, ver se há um curriculum, fechar a gaveta e dizer a resposta para o seu chefe.
E se fosse um computador que verificasse isso tudo? Quanto tempo ele levaria para fazer isso?
Para 10 gavetas? Milésimos de segundos para processar e enviar a apresentar a resposta para o chefe.
O servidor é responsável por ditar as ações do mapa e dos npc entre várias outras coisas.
O servidor está sempre verificando se o NPC deve andar pra direta, esquerda, falar, atacar, estar morto, perseguir o personagem, atacar o personagem e etc.
Verificar cada pessoa que está no jogo, fazer a regeneração de HP e MP, calcular o ataque de um poder e muito mais.
Enquanto o servidor está aberto, este ciclo é repetido infinitas vezes até que o servidor seja fechado, isso é o que da 'vida' ao conteúdo do jogo.
Normalmente, não há como saber quantas vezes esse ciclo é executado por segundo precisamente em uma engine. Podemos ter uma base de: mais de 60 vezes por segundo.
Isso mesmo, o servidor verifica se o NPC está morto mais de 60 vezes por segundo, verifica também, se é o momento certo para recuperar a energia de um jogador.
1 armário com 10 gavetas? 25 segundos para eu verificar todas.
1 servidor com 10 jogadores? 1 segundo para verificar 60 vezes cada jogador e todo o jogo.
1 armário com 20 gavetas? 50 segundos para eu verificar todas.
1 servidor com 20 jogadores? 1 segundo para verificar 60 vezes cada jogador e todo o jogo.
A diferença é que o computador faz cálculos em milésimos de segundos, isso poderia ter uma diferença significativa se estivesse 200 jogadores online. Com 200 jogadores, poderíamos dar um palpite de 1 segundo para o servidor verificar 10 vezes cada jogador e o jogo todo.
200 jogadores, 1 segundo para verificar 10 vezes o jogador e todo o jogo, isso está um pouco bom, quer dizer que o servidor ainda está dando conta.
Agora, vamos aumentar para 400 jogadores.
400 jogadores, 2 segundos para verificar 1 vez o jogador e todo o jogo. Pronto, aqui já podemos ver que teremos lag. Um exemplo clássico é atacar o NPC e receber o resultado do ataque 2 segundos depois, pois o servidor demorou para processar e enviar a resposta, enquanto você estava tentando atacar, ele estava cuidando do ataque de outro jogador e não teve o tempo suficiente para processar sua vez, você ficou em segundo plano.
Aqui entra o processador, ele quem faz os cálculos, um processador forte (bombado e lindo) pode dar conta de processar todos esses usuários sem nenhum problema e manter o bom estado do jogo.
Obs: O que eu disse acima é tudo teoria, lógico que, essas coisas realmente acontecem mas não é nessa ordem dos "números", varia muito de processador, linguagem e de como a engine foi programada e para qual finalidade.
Quantidade de Jogadores e Memória
Quando você declara uma variável, onde é armazenado o valor? Na memória, exato.
Quando um novo jogador se conecta ao jogo, onde são armazenado seus dados para uso? Na memória.
Quanto mais jogadores jogando, mais memoria em uso, a quantidade de memória usada vária de como foi programado a engine. Isso não é um grande motivo para se preocupar com a memória do PC, só tente deixar uma boa quantidade dísponível para o servidor.
Como pode ver, a latência e a quantidade de jogares depende de vários fatores. Como o GoldSlash disse: "Um assunto puxa o outro", ficaria complicado as coisas por aqui. No tópico, eu tentei usar o conhecimento que adquiri e explicar simplificadamente como acontece essas coisas.
Se alguém tiver dúvidas, sugestões ou que queira acrescentar conteúdo ao tópico, deixe comentários.