Não, o UDP ainda é superior em termos de latência de desempenho e sempre será mais rápido, devido à filosofia dos 2 protocolos - assumindo que seus dados de comunicação foram projetados com o UDP ou qualquer outra comunicação com perda em mente.
O TCP cria uma abstração na qual todos os pacotes de rede chegam e eles chegam na ordem exata em que foram enviados. Para implementar essa abstração em um canal com perdas, ele deve implementar retransmissões e tempos limite, que consomem tempo. Se você enviar 2 atualizações no TCP e um pacote da primeira atualização for perdido, você não verá a segunda atualização até:
- A perda da primeira atualização é detectada.
- Uma retransmissão da primeira atualização é solicitada.
- a retransmissão chegou e foi processada.
Não importa a rapidez com que isso é feito no TCP, porque com o UDP você simplesmente descarta a primeira atualização e usa a segunda, mais nova, agora. Ao contrário do TCP, o UDP não garante que todos os pacotes cheguem e não garante que eles cheguem em ordem.
Isso exige que você envie o tipo certo de dados e projete sua comunicação de forma que a perda de dados seja aceitável.
Se você possui dados em que todos os pacotes devem chegar e os pacotes devem ser processados pelo seu jogo na ordem em que foram enviados, o UDP não será mais rápido. De fato, o uso do UDP nesse caso provavelmente seria mais lento porque você está reconstruindo o TCP e implementando-o por meio do UDP. Nesse caso, você também pode usar o TCP.
EDIT - Adicionando algumas informações adicionais para incorporar / abordar alguns dos comentários:
Normalmente, a taxa de perda de pacotes na Ethernet é muito baixa, mas se torna muito maior quando o WiFi está envolvido ou se o usuário tem um upload / download em andamento. Vamos supor que temos uma perda de pacote perfeitamente uniforme de 0,01% (só ida, não ida e volta). Em um jogo de tiro em primeira pessoa, os clientes devem enviar atualizações sempre que algo acontecer, como quando o cursor do mouse gira o player, o que acontece cerca de 20 vezes por segundo. Eles também podem enviar atualizações por quadro ou em um intervalo fixo, que seria de 60 a 120 atualizações por segundo. Como essas atualizações são enviadas em momentos diferentes, elas devem / devem ser enviadas em um pacote por atualização. Em um jogo de 16 jogadores, todos os 16 jogadores enviam esses 20 a 120 pacotes por segundo ao servidor, resultando em um total de 320 a 1920 pacotes por segundo. Com nossa taxa de perda de pacotes de 0,01%, esperamos perder um pacote a cada 5,2 a 31,25 segundos.
Em todos os pacotes que recebermos após o pacote perdido, enviaremos um DupAck e, após o terceiro DupAck, o remetente retransmitirá o pacote perdido . Portanto, o tempo que o TCP requer para iniciar a retransmissão é de 3 pacotes, mais o tempo que leva para o último DupAck chegar ao remetente. Então precisamos aguardar a retransmissão chegar, portanto, no total, esperamos 3 pacotes + 1 latência de ida e volta. A latência de ida e volta é geralmente de 0 a 1 ms em uma rede local e de 50 a 200 ms na internet. Normalmente, 3 pacotes chegarão em 25 ms se enviarmos 120 pacotes por segundo e em 150 ms se enviarmos 20 pacotes por segundo.
Por outro lado, com o UDP nos recuperamos de um pacote perdido assim que obtemos o próximo pacote, perdemos 8,3 ms se enviarmos 120 pacotes por segundo e 50 ms se enviarmos 20 pacotes por segundo.
Com o TCP, as coisas ficam mais confusas se também precisarmos considerar o Nagle (se o desenvolvedor esquecer de enviar o coalescing ou não puder desativar o ACK atrasado ), evitar o congestionamento da rede ou se a perda de pacotes for ruim o suficiente para sermos responsáveis por vários perdas de pacotes (incluindo perda de Ack e DupAck). Com o UDP, podemos escrever facilmente códigos mais rápidos, porque simplesmente não ligamos para ser um bom cidadão da rede, como o TCP.