TCP/UDP - Performance
-
hi,
habe eigentlich eine ganz simple Frage, die mit einem Satz beantwortet aber auch die Einleitung eines Gesprächs sein könnte.Beispiel: Ego-Shooter. Jeder Spieler (Client) schickt via User-Datagram-Protokol (UDP) seine aktuelle Position im x Millisekundentakt an den Server. Kommt ein Packet ma nicht an, ist das auch nicht schlimm. Aber wie ist es wenn er schießt? Wird diese Information auch über UDP gesendet? Hierbei wäre es aber fatal wenn das UDP-Packet nicht ankommt. Kann man also das "Risiko" eingehen, solch "wichtige" Informationen über das schnelle unsichere UDP zu senden oder sollte man lieber zusätzlich eine sichere langsamere TCP-Verbindung aufbauen, über die die wichtigen Infos gesendet werden?
gruß, Fachmann
-
Für's schießen auch UDP. TCP ist dafür meist zu lahm.
Zusätzliche TCP Verbindung wirst du bei einem Shooter kaum brauchen.
-
Wird diese Information auch über UDP gesendet? Hierbei wäre es aber fatal wenn das UDP-Packet nicht ankommt.
Normalerweise nimmt man für sowas eine fertige Library, die genau das kann: "reliable UPD". Solche Libraries bieten dann auch an, dass man für jede Information mitgeben kann, ob sie "reliable" verschickt werden muss oder nicht. Plus meist noch einige weitere Parameter zum "tunen" des Verhaltens.
Natürlich kannst du das auch selbst machen. Im Prinzip läuft es darauf hinaus, dass du dir den Empfang von Daten, die ankommen müssen, von der Gegenstellt bestätigen lässt, und neu überträgst, wenn keine Bestätigung ankommt. Die Schwierigkeit liegt hier wohl darin, ein gutes Protokoll zu definieren. Wenn man die "Bestätigungs-Geschichte" sehr wörtlich nimmt, wird wohl etwas herauskommen, was ganz schrecklich langsam ist.
Daher würde ich eher eine fertige Library verwenden.
-
danke erstmal an bronson
@ hustbär
das habe ich mir auch schon gedacht mit dem Bestätigen aber was ist wenn die Bestätigungsmessage "im netz hängen bleibt" und nicht ankommt. das würde heissen, dass der sender die Information erneut schickt obwohl sie eigentlich schon angekommmen ist. Du hast glaub ich Recht, ich sollte eine fertige Library verwenden!^^
danke dir.
-
guck dir mal die RakNet an: