Nach dem Lesen Ist UDP für datenintensive Echtzeitspiele immer noch besser als TCP? Ich frage mich, ob es sinnvoll ist, TCP und UDP gleichzeitig zu verwenden, aber für verschiedene Zwecke:
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.UDP zur Übertragung von Informationen, die ständig aktualisiert werden und gelegentlich verloren gehen können, da immer neuere Informationen unterwegs sind.
Wie Position, Drehung usw.
Ist das eine vernünftige Idee? Was sind die möglichen Nachteile?
Gibt es bessere Möglichkeiten, damit umzugehen?
networking
multiplayer
udp
gandalf3
quelle
quelle
Antworten:
Dies führt zu einem Paketverlust für UDP aufgrund von Konflikten zwischen den beiden Protokollen. Denken Sie daran, dass UDP keine garantierte Zustellung ist, während TCP dies ist. Weitere TCP-Pakete werden durchkommen, während UDP leidet - TCP führt zu einem Verlust von UDP- Paketen . Es gab auch die (historische) Idee, dass die Router-Infrastruktur TCP gegenüber UDP bevorzugt, obwohl ich bezweifle, dass dies zu diesem späten Zeitpunkt noch zutrifft.
Ich denke, Sie sind besser dran, wenn Sie eines der verbindungsorientierten UDP-Protokolle finden, das für die Verwendung in Spielen und dergleichen verfügbar ist und Ihnen einige der Vorteile von TCP ohne Nachteile bietet. Es gibt einige davon, normalerweise mit einem Whitepaper, in dem jedes Konzept detailliert beschrieben wird.
Ein Beispiel hierfür ist die Open-Source- Enet-Bibliothek , deren Hauptmerkmal die optionale zuverlässige, ordnungsgemäße Zustellung von Paketen über UDP ist.
quelle
Hier ist ein Zitat von Sam Jansen aus einem Kommentar auf gafferongames.com :
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:
Ja, dies ist akzeptabel, vorausgesetzt, Sie halten sich an Ihre Bandbreitengrenzen.
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.
quelle
Ist das eine vernünftige Idee?
Was sind die möglichen Nachteile?
Gibt es bessere Möglichkeiten, damit umzugehen?
quelle
Es ist eine zusätzliche Ressourcenbeschränkung zu berücksichtigen. Bei den meisten Implementierungen (ich glaube allen, habe aber keine Referenz) von TCP auf dem Server ist die Anzahl der gleichzeitig geöffneten TCP-Verbindungen auf dem Server begrenzt. Dies würde die Anzahl der Spieler begrenzen, die gleichzeitig geöffnet sein können, wenn jeder Spieler eine eigene Verbindung benötigt.
Die Grenzwerte werden durch Einstellungen im Netzwerksystem definiert. Zusätzlich verbraucht jede Verbindung etwas Speicher, der von irgendwo auf dem Server kommen muss.
Eine Lösung besteht darin, eine temporäre TCP-Verbindung nur während der Datenübertragung zu öffnen und sofort zu schließen. Dadurch werden Transaktionen langsamer, und das Öffnen einer TCP-Verbindung ist ein ziemlich "teurer" Prozess. Wie immer geht es darum, von Anfang an ein robustes System zu entwickeln, um ein großes Wachstum zu ermöglichen.
quelle