J'ai une question sur UDP. Pour le contexte, je travaille sur un jeu d'action en temps réel.
J'ai beaucoup lu sur les différences entre UDP et TCP et je sens que je les comprends assez bien, mais il y a un élément qui ne s'est jamais senti correct, et c'est la fiabilité , et en particulier les remerciements . Je comprends que UDP n'offre aucune fiabilité par défaut (c'est-à-dire que les paquets peuvent être abandonnés ou arriver en panne). Lorsqu'une certaine fiabilité est requise, la solution que j'ai vue (ce qui est logique sur le plan conceptuel) consiste à utiliser des accusés de réception (c'est-à-dire que le serveur envoie un paquet au client, et lorsque le client reçoit ce message, il renvoie un accusé de réception au serveur) .
Que se passe-t-il lorsque l'accusé de réception est abandonné?
Dans l'exemple ci-dessus (un serveur envoie un paquet à un client), le serveur gère la perte potentielle de paquets en renvoyant des paquets à chaque trame jusqu'à ce que des accusés de réception soient reçus pour ces paquets. Vous pouvez toujours rencontrer des problèmes de bande passante ou des messages hors service, mais uniquement du point de vue de la perte de paquets, le serveur est couvert.
Cependant, si le client envoie un accusé de réception qui n'arrive jamais, le serveur n'aurait d'autre choix que d'arrêter éventuellement d'envoyer ce message, ce qui pourrait interrompre le jeu si les informations contenues dans ce paquet étaient nécessaires. Vous pouvez adopter une approche similaire pour le serveur (c.-à-d. Continuer d'envoyer des accusés de réception jusqu'à ce que vous receviez un accusé de réception pour l'acquittement?), Mais cette approche vous obligerait à boucler d'avant en arrière pour toujours (puisque vous auriez besoin d'un accusé de réception pour l'accusé de réception pour l'accusé de réception etc).
Je pense que ma logique de base est correcte ici, ce qui me laisse deux options.
- Envoyez un seul paquet d'accusé de réception et espérez le meilleur.
- Envoyez une poignée de paquets d'accusé de réception (peut-être 3-4) et espérez le meilleur, en supposant qu'ils ne seront pas tous abandonnés.
Y a-t-il une réponse à ce problème? Suis-je fondamentalement incompréhensible quelque chose? Y a-t-il une garantie d'utiliser UDP dont je ne suis pas au courant? J'hésite à avancer avec trop de code de réseautage jusqu'à ce que je sois à l'aise que ma logique soit solide.