Hier ist ein Zitat von Sam Jansen aus einem Kommentar auf gafferongames.com :
Als Netzwerkforscher und nicht als Spieleentwickler scheint die Schlussfolgerung, TCP und UDP niemals zusammen zu verwenden, ein wenig stark zu sein. TCP hat nur dann einen Paketverlust, wenn zu viele Daten gesendet werden. in gewisser Weise genau wie die UDP-Daten, die Sie senden. Der Unterschied besteht darin, dass Sie keine direkte Kontrolle über die Rate haben, mit der TCP sendet. Dies ist Ihnen verborgen.
Wenn Sie nur zuverlässige Daten senden müssen und sich keine Gedanken über die erneute Übertragung und Implementierung eines zuverlässigen Protokolls machen möchten und wissen, dass die Rate niedrig ist, treten bei der Verwendung von TCP und UDP keine Probleme auf.
Die Beziehung zwischen den beiden ist eigentlich gar nicht so komplex: TCP erhöht lediglich die Sendegeschwindigkeit (wenn Daten zu senden sind), bis ein Paketverlust auftritt. In diesem Fall wählt es die Übertragungsrate zurück und beginnt dann erneut, die Rate zu erhöhen (dies Zeit langsamer). Wenn die Erhöhung der Rate zu Paketverlusten führt, werden wahrscheinlich auch andere Datenströme getroffen, einschließlich Ihrer UDP-Pakete.
Das Papier Merkmale des UDP-Paketverlusts: Die Auswirkung des TCP-Verkehrs wurde erzielt, indem mehrere TCP-Verbindungen gleichzeitig geöffnet und das Netzwerk mit Daten überflutet wurden. Dies führt zu einer Überlastung, gefolgt von einer globalen Synchronisation , die beide verworfene Pakete verursachen. Offensichtlich wird ein Spieleclient nicht ein Dutzend Verbindungen gleichzeitig öffnen und das Netzwerk mit Daten überfluten, sodass Ihre Ergebnisse unterschiedlich sind.
Zur Beantwortung Ihrer Frage:
Ich frage mich, ob es sinnvoll ist, TCP und UDP gleichzeitig zu verwenden, aber für verschiedene Dinge [...]
Ja, dies ist akzeptabel, vorausgesetzt, Sie halten sich an Ihre Bandbreitengrenzen.
- TCP zum Senden von Informationen, die selten gesendet werden, deren Zuverlässigkeit jedoch garantiert sein sollte. Zum Beispiel Punkteaktualisierungen, der Name eines Spielers oder sogar der Ein / Aus-Zustand eines Lichts in der Spielwelt.
Wenn Sie sowohl TCP als auch UDP verwenden, sollten Sie immer lieber so viel wie möglich über UDP und so wenig wie möglich über TCP senden.
Nun frage ich Sie Folgendes: Ist es wirklich notwendig, die Punktzahl, den Namen des Spielers und den Zustand eines Lichts über TCP zu senden? Es ist zwar richtig, dass Sie diese Daten irgendwann erhalten müssen, aber ist es wahr, dass Sie diese Daten genau in der richtigen Reihenfolge und genau einmal empfangen müssen?
Wahrscheinlich nicht.
UDP funktioniert in diesen Fällen einwandfrei , und Quake 3 ist ein gutes Beispiel dafür.
Was ist dann ein gutes Beispiel für TCP neben UDP? Denken Sie an die Chatbox eines Spiels. Die Aktualisierungen dieser Chatbox (dh der neuen Textzeilen) müssen sowohl zuverlässig als auch streng in der richtigen Reihenfolge gesendet werden. Somit passt TCP gut.