UDP vs. TCP: Warum man Spieleserver getrennt vom Chat betreiben sollte
Published: 2023-12-19 08:46:34

Wenn es um die Entwicklung von Multiplayer-Spielen geht, stehen Entwickler oft vor einem Dilemma.

-   Nutze ich meine vorhandenen Spielserver, die bereits meine Mehrspielerfunktionalität betreiben, um den Chat laufen zu lassen?
    
-   Trenne ich meine Spieleserver und führe meinen Chat unabhängig davon aus?
    

Denn schließlich sind es ja nur Chat-Nachrichten, oder? Kleine Nachrichten, die an einen einzelnen Benutzer oder eine kleine Gruppe gesendet werden - da kann ich genauso gut das nutzen, was bereits vorhanden ist. Was könnte schaden? Obwohl es auf den ersten Blick eine gute Option zu sein scheint, das zu nutzen, was man bereits aufgebaut hat, gibt es eine Reihe von Problemen, die bei der Wahl dieses Entwurfsmusters auftreten können.

Wir werden Ihnen zeigen, warum Sie Ihre Spielserver und sozialen Funktionen (vor allem [Chat](https://www.pubnub.com/use-case/in-app-chat/)) unabhängig voneinander betreiben sollten, was sowohl Ihnen als Spieleentwickler als auch Ihren Endbenutzern zugute kommt. Auf diese Weise erhöhen Sie die Leistung und Skalierbarkeit des Spiels selbst und ermöglichen es, dass die sozialen Funktionen in Zukunft leicht um neue Funktionen erweitert werden können.

**Was sind TCP und UDP?**
-------------------------

TCP und [UDP](https://www.pubnub.com/guides/udp/) sind Netzwerkprotokolle, die für die Datenübertragung über das Internet verwendet werden. TCP ist ein verbindungsorientiertes Internetprotokoll, während UDP ein verbindungsloses Protokoll ist.

Die große Debatte über Multiplayer-Gaming-Protokolle ist die Frage, wann man UDP (User Datagram Protocol) und wann [TCP (Transmission Control Protocol)](https://www.pubnub.com/guides/tcp-ip/) verwenden sollte und wann es am besten ist, eines von beiden zu benutzen.

Doch bevor wir dazu kommen, wollen wir die Architektur von Online-Spielen diskutieren.

**UDP vs. TCP Spieleserver: So machen Sie Ihr Online-Spiel besser verwaltbar**
------------------------------------------------------------------------------

Eine Microservices-orientierte Architektur unterteilt eine große Anwendung, in diesem Fall Ihr Spiel, in kleine, unabhängig voneinander versionierte modulare Dienste, die über einfache, allgemein zugängliche APIs miteinander kommunizieren. Dadurch wird es viel einfacher, neue Funktionen zu entwickeln und die einmal entwickelte Bandbreite und Funktionalität zu erhalten.

Durch die Trennung der Spieleserver von der Chatfunktionalität wird die gesamte Infrastruktur überschaubarer, und man kommt einer vollständig mikrodienstorientierten Architektur näher. In diesem Fall betrachten wir speziell den Chat im Spiel und seine Beziehung zu den Spielservern, die das Multiplayer-Spiel betreiben.

Mit einer monolithischen Architektur ist Ihr Entwicklungsteam nun an einen einzigen Technologiestapel gebunden - es verwendet dieselben Programmiersprachen, Datenbanken und Softwareumgebungen, auf denen das Spiel bereits aufgebaut wurde. Wenn Sie neue Entwickler einstellen oder neue Technologien und Systeme erproben möchten, ist es in einer Microservices-Architektur viel einfacher, schnell voranzukommen.

Auch Abhängigkeiten sind bei monolithischen Architekturen viel deutlicher zu erkennen. Wenn eine einzelne Anwendungsfunktion ausfällt, ist das gesamte Spiel verloren. Wenn Sie Ihr Spiel in Microservices aufteilen und ein einzelnes Modul ausfällt, ist es einfacher, den Fehler zu isolieren und zu beheben.

Ihre Spieleserver sind für Folgendes ausgelegt [Übermittlung von Spielerbewegungen und Zuständen](https://www.pubnub.com/docs/general/presence/overview) in Echtzeit zu liefern, und das tun sie auch gut. Die Wiederverwendung derselben Technologie und desselben Designs für Chat-Nachrichten ist einfach nicht die beste Option für diese spezielle Funktionalität. Dezentralisierte Komponenten sind einfacher zu warten und besser skalierbar.

![](https://images.ctfassets.net/3prze68gbwl1/h3rC4If7TY4W9s4s3NADr/ef310e0b3415530bc0cfcd72a089131c/game-infrastructure.png)

Ein Beispiel für eine Spielinfrastruktur, bei der der Chat von den Spielservern getrennt ist. Wir können auch andere Dienste außerhalb der Spielserver ausführen, einschließlich Autorisierung, Anwesenheit, Statistiken und Bestenlisten.

**UDP vs. TCP Spieleserver: Sicherstellung eines nahtlosen Spielerlebnisses und der Chat-Leistung**
---------------------------------------------------------------------------------------------------

Die Gesamtleistung des Spiels ist ein wichtiger Faktor für ein Multiplayer-Spiel. Mit einer monolithischen Architektur mag das Spiel im Labor funktionieren, aber bei Online-Spielen mit einer großen Anzahl von Benutzern, die schnell miteinander kommunizieren, kommt es zu Verzögerungen und erhöhten Latenzen bei der Übermittlung von Chat-Nachrichten und dem Spielerlebnis.

Die Trennung der beiden Bereiche sorgt dafür, dass CPU- und Netzwerkressourcen effizienter genutzt werden. Der Hauptzweck Ihrer Spieleserver besteht darin, jedem Benutzer ein nahtloses Erlebnis in Ihrem Spiel zu bieten. Folglich sollte die Rechenleistung so eingesetzt werden, dass diese Leistung maximiert wird.

Nehmen wir an, Sie haben ein Online-Kampfarena-Spiel wie League of Legends oder EVE Online. Sie haben vielleicht Hunderte von Spielern in einer einzigen Welt, zu einer einzigen Zeit. Das sind Tausende von Nachrichten, die über Ihre Spielserver gesendet werden, um jede Eingabe jedes Spielers zu übermitteln. Dazu kommen dann noch die Chat-Nachrichten. Es ist durchaus möglich, dass Spieler den Chat-Kanal spammen und den Spieleserver absichtlich verlangsamen, da alle Nachrichten die gleiche Priorität haben würden.

Der Spielserver ist bereits mit intensiven Spielerlebnissen beschäftigt - Physik, Grafik, Sound. Wenn dann noch Chat-Nachrichten hinzukommen - Einzel-, Gruppen- und Teamnachrichten -, die analysiert und an die richtigen Benutzer weitergeleitet werden müssen, sammeln sich all diese Nachrichten bei großen Spielen langsam an und beeinträchtigen die Gesamtleistung des Spiels. Es liegt auf der Hand, die Chat-Kanäle getrennt von den Multiplayer-Kanälen zu betreiben. Dadurch wird wichtige Rechenleistung gestohlen, die besser für komplexere Probleme als die Weiterleitung von Chat-Nachrichten eingesetzt werden könnte.

**TCP vs. UDP - Wann man beides braucht, und wann nicht**
---------------------------------------------------------

Schnelle Multiplayer-Spiele (Ego-Shooter, Arenaspiele usw.) verwenden das UDP-Protokoll, um Spielerbewegungen zu synchronisieren und den Spielstatus zu aktualisieren. UDP-Header sind ideal, um diese Spielaktualisierungen mit lächerlich hoher Geschwindigkeit zu senden, aber die Nachrichten sind nicht garantiert (weil die nächste Nachricht so schnell hinterherkommt).

### Warum wird UDP gegenüber TCP bevorzugt? Und andersherum?

Die TCP-Verbindung garantiert die Zustellung von Nachrichten, was sie zu einer hervorragenden Option für den Chat macht. Wenn Sie Ihr Spiel über UDP und Ihre sozialen Funktionen über TCP betreiben, werden Sie eine hervorragende Leistung erzielen.

![](https://images.ctfassets.net/3prze68gbwl1/3F6epR2uvWaGMsZs6QVgjF/43009b230140dde81fa41153063718d9/tcp-vs-udp.png)

Bei weniger intensiven Multiplayer-Spielen, wie z. B. rundenbasierten Spielen, ist TCP jedoch sowohl für das Spiel als auch für den Chat eine geeignete Option. Da TCP die Zustellung von Nachrichten garantiert und bei Spielen, bei denen es auf jeden Zug ankommt (z. B. bei Scrabble oder Tic-Tac-Toe), ist es eine gute Option für das Multiplayer-Gameplay. Natürlich sollten Sie den Chat von den Spielserververbindungen trennen, vor allem, wenn Ihr Spiel in Schwung kommt und Tausende von Benutzern gleichzeitig verbunden sind.

### Berücksichtigen Sie die Latenzzeit, wenn Sie TCP und UDP für verschiedene Funktionen verwenden

Die Latenz ist ein weiterer Punkt, den es zu berücksichtigen gilt, da es unterschiedliche Standards für die Latenz von Multiplayer-Funktionen und sozialen Funktionen gibt. Für ein Multiplayer-Spiel, das den Spielstatus sicherstellt und die Eingaben der Spieler übermittelt, liegt der Industriestandard bei maximal 20 ms. Bei einer Chat-Anwendung hingegen beträgt die maximale Latenzzeit für die Übermittlung einer Chat-Nachricht 250 ms. Sie haben also zwei verschiedene Arten von Echtzeit-Nachrichtenübermittlung für Online-Spiele mit zwei verschiedenen Standards. Da sie unabhängig voneinander funktionieren, können Sie jede von ihnen je nach Bedarf verwalten.

**Einfaches Hinzufügen neuer sozialer Funktionen mit TCP- oder UDP-Protokoll**
------------------------------------------------------------------------------

Wenn Sie den Chat als eigenständigen Dienst betreiben und sich für ein branchenübliches Netzwerkprotokoll[(XMPP](https://www.pubnub.com/learn/glossary/what-is-xmpp/), [WebSockets](https://www.pubnub.com/guides/what-are-websockets-and-when-should-you-use-them/), [ngrok](https://www.pubnub.com/guides/what-is-ngrok/)) oder einen gehosteten Dienst (PubNub) entscheiden, können Sie problemlos neue leistungsstarke soziale Funktionen hinzufügen.

Beginnen Sie mit dem Kern-Chat, der es den Benutzern ermöglicht, individuell und in Gruppen zu chatten. Damit haben Sie die zugrundeliegende Infrastruktur sowie die grundlegenden [Veröffentlichungs- und Abmeldemöglichkeiten](https://www.pubnub.com/guides/everything-you-need-to-know-about-pub-sub/), und es gibt eine Menge anderer sozialer Funktionen, die Sie leicht darauf aufbauen können. Mit minimalem Code können Sie Chat-Funktionen wie Tippen, Anwesenheit, um anzuzeigen, welche Spieler online und offline sind, und Zähler für ungelesene Nachrichten hinzufügen - Funktionen, die von den Benutzern erwartet werden.

**TCP und UDP: Ein Blick in die Zukunft**
-----------------------------------------

Große und kleine Spieleanwendungen bewegen sich in Richtung dieser Architektur, darunter [Pocket Gems](https://www.pubnub.com/customers/pocket-gems/)und in jüngster Zeit [EVE Online](https://www.eveonline.com/article/p4i0qx/new-chat-backend-coming-with-the-march-release). Von besserer Skalierbarkeit, Flusskontrolle und effizienterer Leistung bis hin zur Freiheit, Innovationen zu entwickeln, ohne an einen einzigen Stack gebunden zu sein, liegen die Vorteile auf der Hand - die Trennung von Chat und Spielservern ist der richtige Weg.

_Mit PubNub Chat können Sie ganz einfach_ einen [_In-Game-Chat_](https://www.pubnub.com/industry/gaming/) _als Basis für robuste soziale Funktionen_ [_implementieren_](https://www.pubnub.com/industry/gaming/)_, so dass Sie sich mehr auf die Entwicklung Ihres Kernspiels und weniger auf die Skalierung und Wartung der sozialen Infrastruktur konzentrieren können._

#### **_Referenzen_**

-   [_Erste Schritte in der Programmierung von Multiplayer-Spielen_](https://hub.packtpub.com/getting-started-multiplayer-game-programming/)
    
-   [_Analyse und Überarbeitung der Chat-Architektur in EVE Online_](http://uu.diva-portal.org/smash/get/diva2:408940/FULLTEXT01.pdf)
    

Wie kann PubNub Ihnen helfen?
=============================

Dieser Artikel wurde ursprünglich auf [PubNub.com](https://pubnub.com/blog/tcp-vs-udp/) veröffentlicht.

Unsere Plattform hilft Entwicklern bei der Erstellung, Bereitstellung und Verwaltung von Echtzeit-Interaktivität für Webanwendungen, mobile Anwendungen und IoT-Geräte.

Die Grundlage unserer Plattform ist das größte und am besten skalierbare Echtzeit-Edge-Messaging-Netzwerk der Branche. Mit über 15 Points-of-Presence weltweit, die 800 Millionen monatlich aktive Nutzer unterstützen, und einer Zuverlässigkeit von 99,999 % müssen Sie sich keine Sorgen über Ausfälle, Gleichzeitigkeitsgrenzen oder Latenzprobleme aufgrund von Verkehrsspitzen machen.

PubNub erleben
--------------

Sehen Sie sich die [Live Tour](https://www.pubnub.com/tour/introduction/) an, um in weniger als 5 Minuten die grundlegenden Konzepte hinter jeder PubNub-gestützten App zu verstehen

Einrichten
----------

Melden Sie sich für einen [PubNub-Account](https://admin.pubnub.com/signup/) an und erhalten Sie sofort kostenlosen Zugang zu den PubNub-Schlüsseln

Beginnen Sie
------------

Mit den [PubNub-Dokumenten](https://www.pubnub.com/docs) können Sie sofort loslegen, unabhängig von Ihrem Anwendungsfall oder [SDK](https://www.pubnub.com/docs)