Frage

Einige Spiele heute ein Netzwerk-System verwenden, die Nachrichten über UDP sendet, und stellt sicher, dass die Nachrichten zuverlässig und bestellt werden.

Zum Beispiel RakNet ist eine beliebte Spiel Netzwerk-Engine. Es verwendet nur UDP für seine Verbindungen und verfügt über ein ganzes System, um sicherzustellen, dass Pakete zuverlässig sein und bestellt, wenn Sie so wählen.

Meine grundlegende Frage ist, was ist da los? TCP ist nicht das Gleiche wie bestellt, zuverlässig UDP? Was macht es so viel langsamer, dass die Menschen im Grunde das Rad neu erfinden?

War es hilfreich?

Lösung

Allgemein / Spezialisierung

  1. TCP ist ein universelles zuverlässiges System
  2. UDP +, was ein besonderer Zweck zuverlässiges System ist.

Specialized Dinge sind in der Regel besser als Allzweck Dinge für die Sache, die sie spezialisiert sind.

Strom / Meldung

  1. TCP-Stream-basierte
  2. UDP ist meldungsbasierte

Senden von diskreten Spiel Informationen Karten in der Regel besser auf ein nachrichtenbasierte Paradigma. Senden ist es durch einen Strom möglich, aber furchtbar ineffektiv. Wenn Sie zuverlässig wollen eine riesige Menge an Daten (File Transfer) senden, ist TCP sehr effektiv. Deshalb UDP Bit-Torrent verwendet für Steuernachricht und TCP zum Senden von Daten.

Andere Tipps

Wir wechselten von zuverlässig unzuverlässig in „Liga der Legenden“ vor etwa einem Jahr wegen mehrerer Vorteile, die da unter Beweis gestellt haben, wahr zu sein:

1) Alte Informationen irrelevant. Wenn ich ein Gesundheitspaket senden und es nicht ankommen ... Ich mag nicht für das gleiche Gesundheitspaket warten muß erneut zu senden, wenn ich weiß, sein geändert.

2) Order ist manchmal nicht erforderlich. Wenn ich verschiedene Nachrichten an verschiedene Systeme bin das Senden kann es nicht notwendig sein, diese Nachrichten, um zu bekommen. Ich habe nicht den Client zwingen, für Nachrichten in Ordnung zu warten.

3) Unzuverlässige wird nicht mit Nachrichten ... dh Warten auf Bestätigungen gesichert, was bedeutet, dass Sie Verlust Spikes viel schneller lösen können.

4) Sie können erneute Senden steuern, wenn unbedingt effizienter. Wie etwas Umpacken, die nicht in ein anderes Paket gesendet hat. (TCP ist umpacken, aber Sie können es tun, effizienter mit dem Wissen darüber, wie das Programm funktioniert.)

5) Flusskontrolle der Nachricht wie Nachrichten Wegwerfen, die weniger relevant sind, wenn das Netzwerk plötzlich Spikes. Das Netzwerksystem kann wählen, nicht weniger relevante Nachrichten erneut zu senden, wenn Sie einen Verlust Spitze haben. Mit TCP würden Sie noch eine Warteschlange von Nachrichten, die erneut zu senden versuchen, welche niedrigere Priorität sein kann.

6) Kleineres Header-Paket ... nicht wirklich braucht viel zu sagen über die.

Es gibt viel mehr von einer Differenz zwischen UDP und TCP als nur Zuverlässigkeit und Sequenzierung:

Im Herzen der Angelegenheit ist die Tatsache, dass UDP ist verbindungslos , während TCP ist verbunden . Dieser einfache Unterschied führt zu vielen anderen Unterschiede, ich werde in der Lage sein nicht reasonbly hier zusammenzufassen. Sie können die Analyse unten viel ausführlicher lesen.

TCP - UDP Comparative Analysis

Die Antwort in meiner Meinung nach den zwei Worten: "Congestion control"

TCP geht auf große Längen, die Bandbreite des Pfades zu verwalten - das Beste daraus zu verwenden, sondern um sicherzustellen, dass es Raum für andere Anwendungen ist. Dies ist eine sehr schwierige Aufgabe, und von Natur aus ist es nicht möglich, 100% der Bandbreite von 100% der Zeit zu verwenden.

Mit UDP, auf der anderen Seite, kann man ihr eigenes Protokoll macht die Pakete auf den Draht zu senden, so schnell, wie sie wollen - das ist das Protokoll sehr unfreundlich zu anderen Anwendungen macht, kann aber mehr „Performance“ kurzfristige gewinnen . Auf der anderen Seite ist es mit hohen Wahrscheinlichkeit, dass, wenn die Bedingungen angemessen sind, ist diese Art von Protokollen beitragen könnte Staus Zusammenbruch .

TCP ist ein Strom orientiertes Protokoll, während UDP ein nachrichtenorientiertes Protokoll ist. Daher tut TCP mehr als nur Zuverlässigkeit und Bestellung. Siehe diesen Beitrag für weitere Details. Grundsätzlich fügten die RakNet Entwickler die Zuverlässigkeit und Ordnung, während sie noch als nachrichtenorientiertes Protokoll zu halten und so das Ergebnis war leichter als TCP (was mehr zu tun hat).

Dieser kleine Artikel ist alt, aber es ist immer noch ziemlich wahr, wenn es um Spiele geht. Es erklärt die beiden Protokolle und die Verwüstung diese Leute gingen versuchen, ein Multiplayer-Internet-Spiel zu entwickeln. "X-Wing vs Tie Fighter"

Lessons Learned (Das Internet saugt)

Es gibt eine Einschränkung auf diese, obwohl, ich laufe / ein Multiplayer-Spiel entwickeln, und ich habe beide verwendet. UDP war viel besser für meine app, aber eine Menge Leute konnten nicht mit UDP spielen. Router und solche, die Verbindungen blockiert. Also änderte es auf den „zuverlässig“ TCP. Nun ... zuverlässig? Ich glaube nicht. Sie ein Paket senden, keine Fehler, senden Sie eine andere und es stürzt ab (Ausnahme) in der Mitte des Pakets. Nun, welche Pakete gemacht? So haben Sie ein zuverlässiges Protokoll auf TCP Schreiben am Ende, um UDP zu simulieren - aber kontinuierlich eine neue Verbindung aufzubauen, wenn er abstürzt. Nehmen Sie etwa ineffizient.

UDP + Stopp und warten ARW = gut

UDP + Sliding Window = besser

TCP + Sliding Window Wiederverbindungs-? = Worthless Bulkware. (IMHO)

Die andere Nebenwirkung ist Multithreading-Anwendungen. TCP eignet sich gut für einen Chat-Raum Typ Sache, da jedes Zimmer einen eigenen Thread sein kann. Ein Raum kann 60-100 Personen halten und es läuft gut, da der Raum Thread die Sockets für jeden Teilnehmer enthält.

UDP auf der anderen Seite wird am besten gedient (IMO) von einem Thread, aber wenn Sie das Paket erhalten, haben Sie es zu analysieren, um herauszufinden, wer es herkam (via Info gesendet oder RemoteEndpoint), übergeben Sie dann diese Daten zu das in einer Chatroom Gewinde THREAD Weise.

Eigentlich haben Sie mit TCP, das gleiche zu tun, sondern nur auf einer Verbindung.

Letzter Punkt. Denken Sie daran, dass TCP wird nur Fehler aus und tötet die Verbindung zu jeder Zeit, aber Sie können in etwa 0,5 Sekunden wieder anschließen und die gleichen Informationen senden. Die meisten bizzare Sache mit dem ich je gearbeitet habe.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top