it-swarm.com.de

TCP oder UDP für ein Multiplayer-Spiel?

Das ist eine Frage, die ich oft sehe. Die meisten Leute sagen, UDP sei für Echtzeitspiele immer besser als TCP. Mein Verständnis ist, dass TCP versucht, Pakete immer wieder neu zu senden, bis die andere Seite sie erhält, während es UDP egal ist.

Die meisten Dinge, die ich gelesen habe, sind, dass UDP ein Muss für jedes Echtzeitspiel ist und TCP ist schrecklich. Aber die Sache ist, die meisten Leute scheinen irgendeine Form von TCP auf UDP sowieso. Und ich habe auch gehört, dass der Unterschied zwischen den beiden vernachlässigbar ist, da wir nicht mehr in den 80ern sind und das Internet jetzt ziemlich schnell und zuverlässig ist.

Ist mein allgemeines Verständnis hier falsch? Kann jemand das für mich klären?

19
flooblebit

Hängt davon ab, ob es sich um Peer-to-Peer, Client/Server mit den Benutzern handelt, auf denen der Server ausgeführt wird, oder Client/Server mit einem Rechenzentrum, auf dem der Server ausgeführt wird. Nur im letzteren Fall ist das Internet wirklich schnell und zuverlässig. Die Computer Ihrer Benutzer sind nicht garantiert schnell und sicherlich nicht zuverlässig.

Mit UDP können Sie die Art der TCP-ähnlichen Implementierung, die Sie durchführen, besser steuern. Es gibt Ihnen mehr Flexibilität, um Pakete außerhalb der Reihenfolge auszuführen und Pakete zu verwerfen, die Sie für unnötig halten, während Sie Pakete wiederholen, die Sie für wichtig halten. Dies sollte jedoch nur bei Bedarf und mit dem erforderlichen Fachwissen erfolgen.

Wenn Sie auf diese Flexibilität verzichten können, funktioniert TCP gut genug und spart Ihnen viel Zeit. Selbst professionelle Studios (wie eines, in dem ich gearbeitet habe) verwenden TCP) = wenn sie UDP nicht unbedingt benötigen und Leute haben, die sich der Netzwerkprogrammierung widmen .

12
Kevin Fee

Es wäre eine Annahme zu sagen, dass "das Internet jetzt ziemlich schnell und zuverlässig ist", wie @Ordous betonte, und eine gefährliche auch.

Der Grund, warum das benutzerdefinierte UDP + -Protokoll für übermittlungskritische Pakete bei den meisten Spielen magisch ist, ist, dass es manchmal "in Ordnung" sein kann, wenn Sie ein Paket verlieren (nur für z. B. sekundäre unkritische Ereignisse, um das Spiel zu beenden). Es gibt auch Zeiten, in denen es "überhaupt nicht in Ordnung" ist, Daten für z. B. Cursorbewegungen usw. zu verlieren. (Ich mache keine Spieleentwicklung für meinen Lebensunterhalt, also verzeihen Sie meine vagen Beispiele.)

UDP verschwendet standardmäßig keine Zeit damit, sie immer wieder zu pushen.

Und viele Spiele scheinen im Übrigen das Paket "Okay, manchmal zu verlieren" zu haben, mehr als "Immer ohne Fehler liefern müssen" -Pakete. Damit eine natürliche Passform für diese Aufgabe.

Alles, was für UDP benötigt wurde, war die Verwendung eines benutzerdefinierten Protokolls, das nur dazu beiträgt, die Pakete "Immer ohne Fehler liefern zu müssen" ordnungsgemäß zu übermitteln und den Rest der Spieldaten der Netzwerkverbindung zu überlassen.

Wenn Sie nun entscheiden, aus welcher Art von Verkehr die meisten IHREN Daten stammen, die übertragen werden sollen, können Sie sich besser entscheiden.

Der Punkt gegen TCP) wäre, dass die Zeit, die für Wiederholungsversuche aufgewendet wird, eher für das Senden von Paketen aufgewendet werden könnte, die JETZT wichtig sind.

Es besteht auch die Möglichkeit, dass TCP] bei Problemen während der Übertragung zu einem schlechteren Gameplay-Szenario für den Benutzer führt und dessen Erfahrung im Vergleich zu UDP + Custom Stack (This) beeinträchtigt Der letzte Teil ist nur eine Vermutung. Ich werde dies anderen Experten hier überlassen, um dies zu kommentieren. Ich würde gerne etwas über die Möglichkeiten dieses Szenarios erfahren.

3
Naresh Kumar