Eu tenho uma pergunta sobre o UDP. Por contexto, estou trabalhando em um jogo de ação em tempo real.
Eu li bastante sobre as diferenças entre UDP e TCP e sinto que as entendo muito bem, mas há uma que nunca pareceu correta, e que é a confiabilidade e os reconhecimentos específicos . Entendo que o UDP não oferece confiabilidade por padrão (ou seja, os pacotes podem ser descartados ou chegar fora de ordem). Quando alguma confiabilidade é necessária, a solução que eu vi (que faz sentido conceitualmente) é usar confirmações (ou seja, o servidor envia um pacote ao cliente e, quando o cliente recebe essa mensagem, envia de volta uma confirmação ao servidor) .
O que acontece quando o reconhecimento é descartado?
No exemplo acima (um servidor enviando um pacote para um cliente), o servidor lida com a perda potencial de pacotes reenviando pacotes a cada quadro até que sejam recebidos reconhecimentos por esses pacotes. Você ainda pode encontrar problemas de largura de banda ou mensagens fora de ordem, mas, do ponto de vista da perda de pacotes, o servidor é coberto.
No entanto, se o cliente enviar uma confirmação que nunca chega, o servidor não terá outra opção a não ser parar de enviar a mensagem, o que poderia interromper o jogo se as informações contidas nesse pacote fossem necessárias. Você pode adotar uma abordagem semelhante ao servidor (ou seja, continuar enviando agradecimentos até receber uma confirmação pela confirmação?), Mas essa abordagem o faria alternar para sempre (já que você precisaria de uma confirmação para a confirmação para a confirmação) e assim por diante).
Sinto que minha lógica básica está correta aqui, o que me deixa com duas opções.
- Envie um único pacote de reconhecimento e espere o melhor.
- Envie um punhado de pacotes de reconhecimento (talvez 3-4) e espere o melhor, assumindo que nem todos serão descartados.
Existe uma resposta para esse problema? Estou fundamentalmente interpretando algo errado? Existe alguma garantia de usar UDP que eu não conheço? Sinto-me hesitante em seguir em frente com muito código de rede até me sentir confortável ao saber que minha lógica está correta.