Esta é uma pergunta que vejo muito. A maioria das pessoas diz que o UDP é sempre melhor para jogos em tempo real do que o TCP. Meu entendimento é que o TCP tenta reenviar pacotes repetidamente até que o outro lado os obtenha, enquanto o UDP não se importa.
A maioria das coisas que li é que o UDP é obrigatório para qualquer jogo em tempo real e o TCP é terrível. Mas o problema é que a maioria das pessoas parece implementar alguma forma de TCP sobre o UDP de qualquer maneira. E também ouvi dizer que a diferença entre os dois é insignificante, já que não estamos mais nos anos 80 e a internet agora é bem rápida e confiável.
O meu entendimento geral aqui está errado? Alguém pode esclarecer isso para mim?
game-development
networking
tcp
flooblebit
fonte
fonte
internet is now pretty fast and reliable
Não, não é. A largura de banda aumentou dramaticamente, sim, mas a latência ainda é bastante alta. Com o TCP puro, você precisa que o tempo de verificação do servidor seja superior à latência máxima acessível, a menos que você faça squishing de pacotes - o que é melhor feito no cliente via UDP. O problema é que algumas informações em um jogo precisam ser confiáveis, enquanto outras precisam ser rápidas. Os protocolos personalizados sobre o UDP permitem isso, assim como vários proprietários, que oferecem tudo o que você precisa em um bom pacote.t0
que nunca é recebido, envia o novo estado mundial em um momentot1
, não precisa esperar até que o cliente realmente receba o primeiro pacote, que já está obsoleto.Respostas:
Depende se você está falando de ponto a ponto, cliente / servidor com os usuários executando o servidor ou cliente / servidor com um data center executando o servidor. Somente neste último caso, a Internet é realmente rápida e confiável. Não é garantido que os computadores de seus usuários sejam rápidos e certamente não serão confiáveis.
O UDP permite maior controle sobre o tipo de implementação semelhante ao TCP que você está fazendo. Dá a você maior flexibilidade para executar pacotes fora de ordem, descartar pacotes que você considera desnecessários ao tentar novamente os pacotes que considera importantes, esse tipo de coisa. Mas isso só deve ser feito se necessário e se você tiver o conhecimento necessário.
Se você pode ficar sem essa flexibilidade, o TCP funciona bem o suficiente e economiza muito tempo. Até estúdios profissionais (como o que eu trabalhei) usam o TCP se não precisam absolutamente de UDP e têm pessoas dedicadas à programação em rede.
fonte
Seria uma suposição dizer "A Internet agora é bem rápida e confiável", como o @Ordous apontou, e uma perigosa também.
A razão pela qual o protocolo personalizado UDP + para pacotes críticos para a entrega faz a mágica na maioria dos jogos é que, há momentos em que pode ser "bom" se você perder algum pacote (apenas para, por exemplo, eventos secundários não críticos para concluir o jogo) , há também momentos em que "não está tudo bem" perder alguns dados, por exemplo, movimento do cursor etc. (eu não desenvolvo jogos para ganhar a vida, então perdoe meus exemplos vagos)
O UDP não perde tempo pressionando-os repetidamente, por padrão.
Aliás, muitos jogos parecem ter os pacotes "aceitável perder às vezes" mais do que "sempre precisam entregar sem falhas". Portanto, fazer um ajuste natural para esta tarefa.
Tudo o que era necessário no UDP era usar um protocolo personalizado que apenas ajudasse a fornecer os pacotes "sempre precisamos entregar sem falhas" corretamente, deixando o restante dos dados do jogo à mercê da conexão de rede.
Agora, decidir sobre que tipo de tráfego compõe a maioria dos SEUS dados a serem transmitidos ajudará você a decidir melhor.
O argumento contra o TCP seria que o tempo gasto em novas tentativas poderia ser gasto no envio de pacotes importantes agora.
Também há uma chance de que, se houver algum problema durante a transmissão, o TCP possa entrar em cascata para um cenário de jogo mais detalhado para o usuário, estragando sua experiência em comparação com a Pilha Personalizada UDP + (Esta última parte é apenas um palpite. Vou deixar faça isso com outros especialistas aqui para comentar sobre isso. Gostaria de aprender sobre as possibilidades desse cenário).
fonte