Ich habe eine Frage zu UDP. Für den Kontext arbeite ich an einem Echtzeit-Actionspiel.
Ich habe einiges über die Unterschiede zwischen UDP und TCP gelesen und ich habe das Gefühl, dass ich sie recht gut verstehe, aber es gibt ein Stück, das sich nie richtig angefühlt hat, und das ist Zuverlässigkeit und besondere Anerkennung . Ich verstehe, dass UDP standardmäßig keine Zuverlässigkeit bietet (dh Pakete können verworfen werden oder unordentlich ankommen). Wenn eine gewisse Zuverlässigkeit erforderlich ist, sind Bestätigungen die Lösung, die ich gesehen habe (was konzeptionell sinnvoll ist) (dh der Server sendet ein Paket an den Client, und wenn der Client diese Nachricht empfängt, sendet er eine Bestätigung an den Server zurück). .
Was passiert, wenn die Bestätigung verworfen wird?
Im obigen Beispiel (ein Server sendet ein Paket an einen Client) behandelt der Server den potenziellen Paketverlust, indem er Pakete in jedem Frame erneut sendet, bis für diese Pakete Bestätigungen eingehen. Sie könnten immer noch auf Probleme mit der Bandbreite oder Nachrichten in der falschen Reihenfolge stoßen, aber rein aus der Perspektive des Paketverlusts wird der Server abgedeckt.
Wenn der Client jedoch eine Bestätigung sendet, die niemals eintrifft, hat der Server keine andere Wahl, als das Senden dieser Nachricht zu beenden, was das Spiel unterbrechen könnte, wenn die in diesem Paket enthaltenen Informationen erforderlich wären. Sie könnten einen ähnlichen Ansatz für den Server wählen (dh weiterhin Bestätigungen senden, bis Sie eine Bestätigung für die Bestätigung erhalten?), Aber bei diesem Ansatz müssten Sie für immer hin- und herschleifen (da Sie eine Bestätigung für die Bestätigung für die Bestätigung benötigen würden) und so weiter).
Ich habe das Gefühl, dass meine Grundlogik hier richtig ist, was mir zwei Möglichkeiten lässt.
- Senden Sie ein einziges Bestätigungspaket und hoffen Sie auf das Beste.
- Senden Sie eine Handvoll Bestätigungspakete (möglicherweise 3-4) und hoffen Sie auf das Beste, vorausgesetzt, nicht alle werden verworfen.
Gibt es eine Antwort auf dieses Problem? Verstehe ich etwas grundsätzlich falsch? Gibt es eine Garantie für die Verwendung von UDP, die mir nicht bekannt ist? Ich zögere, mit zu viel Netzwerkcode voranzukommen, bis ich mich sicher fühle, dass meine Logik solide ist.