Technikthread

ExInferis

Rare-Mob
Mitglied seit
30.01.2007
Beiträge
467
Reaktionspunkte
0
Kommentare
175
Buffs erhalten
131
Wie versprochen hier nun der Technikthread der euch allen ein wenig helfen soll die Technik eines MMOs zu verstehen und so vielleicht euch hilft Probleme zu vermeiden oder dann Schwierigkeiten zu lösen.
Für alle anderen mag es vielleicht auch einfach nur interessant sein mal zu sehen wie bestimmte Aspekte funktionieren. Bei der Fülle ist es denke ich verständlich, wenn nicht alles sofort online steht, aber ich werde es nach und nach füllen, ergänzen und korrigieren wenn ich sehe, was ich für ein wirres Gerede von mir gegeben habe.
Sollten Änderungen geschehen sein, werde ich entsprechend einen Post machen der darauf hinweist.
Ich erhebe keinerlei Anspruch auf absolute Vollständigkeit noch auf 100%ige Korrektheit, weil sich manche Sachen einfach abstrahiert besser darstellen lassen und so die absolute Richtigkeit zugunsten der Verständlichkeit etwas weichen muss.
Ergänzende Erklärungen die dann die Verständlichkeit wieder fallen lassen um die Richtigkeit wieder herzustellen, folgen dann einfach wenn das Interesse an tiefer gehenden Informationen da ist.
Aber bis daher erstmal viel Spaß beim lesen und für Fragen stehe ich euch selbstverständlich gerne zu Verfügung.

Inhaltsverzeichnis

1. Netzwerktechnologie / -topologie für Spiele®
1.1 Was ist ein Netzwerk
1.2 Wie funktioniert Netzwerkkommunikation
1.3 Peer-to-Peer Netzwerke
1.4 Client-Server Netzwerke
1.5 Router und Firewalls

2. Netzwerktheorie
2.1 Protokolle
2.2 Adressen und Ports
2.3 Verbindungsaufbau und Kommunikation

3. Client-Server
3.1 Aufbau einer Client-Server-Verbindung
3.2 Vor- und Nachteile
3.3 Stolpersteine

4. Das Serversystem
4.1 Struktur eines Gameservers für MMOs
4.2 Ausstattung und Aufbau
4.3 Unterschiedliche Arten von Gameservern

5. Der Clientrechner
5.1 Technische Komponenten
5.2 Zusammenspiel der einzelnen Komponenten
5.3 Grundkenntnisse der Installation
5.4 Abschließende Konfiguration

6. MMO-Theorie
6.1 Was ist ein MMO?
6.2 Warum ein MMO?
6.3 Probleme und Schwierigkeiten der MMO-Entwicklung
6.4 Entwicklung einer persistenten Welt
6.5 Der Geist in der Maschine

7. Was zur Hölle macht mein Client?
7.1 Netzwerkkommunikation
7.2 Benutzereingaben
7.3 Die Grafikengine
7.4 Sound und was es sonst noch gibt

8. Server, das unbekannte Wesen
8.1 Netzwerkkommunikation
8.2 Verarbeitung der Benutzereingaben
8.3 Die persistente Welt
8.4 Instanzierung
8.5 Die KI
8.6 Datenbanken

9. Was passiert mit meinen Daten?
9.1 Der Client und die Pakete
9.2 Pakete ohne Porto
9.3 Wo ist nun mein Paket?
9.4 Das Datenpaket als Einschreiben
9.5 Der Server und die Pakete
9.6 Verarbeitung der Datenpakete
9.7 Aktion und Reaktion
9.8 Zurück zum Sender

10. Lags, Datenstau und die Geister die ich rief
10.1 Was ist ein Lag?
10.2 Wie kann ich Lags verhindern oder minimieren
10.3 Datenstau auf der Autobahn
10.4 Geister?

11. Mögliche Problemlösungen kurz notiert
11.1 Grafik
11.2 Netzwerk
11.3 Sound
11.4 System

12. Für WAR
12.1 Funktionsweise einer Kollisionsabfrage
 
1. Netzwerktechnologie / -topologie für Spiele®


1.1 Was ist ein Netzwerk

Jeder von euch hat jeden Tag mit Netzwerken zu tun. Als Netzwerk definiert sich ein fester Verbund jeglicher Art mit gemeinsamen Interessen, von gegenseitigem Nutzen oder zum Austausch von Informationen.
Man kennt die sozialen Netzwerke, Communitys im Internet wie meinVZ, Xing, buffed und andere, so wie auch Geheimdienste oder Terrororganisationen Netzwerke sind.
Nun, im Bereich Computer funktionieren Netzwerke ebenso.
Ein Computernetzwerk ist nichts anderes als ein fester Verbund von zwei oder mehr Rechnern mit dem Zweck des Informationsaustauschs und einer mehr oder weniger gemeinsamen Zielsetzung. Wie dabei die Verbindung zustande kommt, ist vollkommen egal. Es kann über ein Modem sein, die Netzwerkkarte, serielle Anschlüsse, Funk und selbst wenn ihr ein Gerät hättet, welches die Daten trommeln kann und ein anderer PC die Geräusche wieder in Daten umwandelt, wäre es ein Netzwerk. (Nein, ihr könnte bestimmt keinen HD-Film zu eurem Freund rüber per Schlagzeugsolo schicken)
Jeder der im Internet unterwegs ist, ist Teil wenigstens eines Netzwerks, eben des Internets. Davon ab kann man noch gleichzeitig Teil anderer Netzwerke sein, dem Heimnetz oder diverser anderer.
Doch wir beschäftigen uns hier mit dem Internet, da es die Basis für alles weitere hier beschriebene bildet.
Benutzer stellen über Modem, Router, Kabel oder Funk ihre Verbindung mit dem Internet her und werden so Teil dieses weltumspannenden Netzwerks.


1.2 Netzwerkkommunikation

Der Sinn des Netzwerks ist Kommunikation. Eine Frage wird mit einer Antwort belohnt (meistens jedenfalls), Informationen werden ausgetauscht und/oder zusammengetragen.
Jedoch wie läuft diese Kommunikation ab?
Es gibt mehrere so genannte Protokolle die die Netzwerkkommunikation regeln. Ein paar der bekannteren sind IPX/SPX, NetBEUI und TCP/IP. Letzteres sollte jedem soweit bekannt sein.

Diese Protokolle ermöglichen uns also, dass die Computer und diverse andere Geräte Informationen miteinander austauschen. Doch wie sieht das in der Praxis aus?
Ich erkläre es mal anhand des WWW wenn ihr eine Internetseite aufrufen wollt.

Das ganze verhält sich wie ein Frage-Antwort-Spiel wobei das Protokoll die Regeln vorgibt wie die Daten ausgetauscht werden. Computer A sendet als Beispiel eine Anfrage und wartet auf die entsprechende Antwort. Wenn man also eine Internetseite aufrufen will, schickt man an den Server die Anfrage für Seite XY und wenn die Frage richtig gestellt wurde, bekommt man die Daten dazu als Antwort geliefert.

Grob gibt es immer einen Sender und einem Empfänger. Auf Seiten des Senders werden die Daten in Pakete verpackt und dann auf den Weg geschickt. Der Empfänger sammelt diese Pakete, setzt sie wieder in der richtigen Reihenfolge zusammen und sollte mal eins verloren gegangen sein, fordert er es neu beim Sender an.

Das ist alles was Netzwerkkommunikation ist, grob umrissen. Aber weitere Details folgen im Abschnitt Netzwerktheorie


1.3 Peer-to-Peer Netzwerke

Eine Art der Netzwerke für Spiele ist das Peer-to-Peer Netzwerk. Bei dieser Art gibt es keinen eindeutigen Server und alle Clients verrichten die gleiche Arbeit. Man denke zum Beispiel an Command and Conquer und diverse andere frühe Netzwerkspiele bei denen kein dedizierter Gameserver von Nöten war. Ein Spieler eröffnete das Spiel (hostete das Spiel) und alle anderen verbinden sich dann zu diesem Spieler.
Nun mag man meinen dass dieser Spieler dann ja der Server sei, was aber nicht ganz stimmt. Selbst wenn der eröffnende Spieler aus dem Spiel aussteigt, läuft das Spiel weiter, weil dann einfach ein anderer Client die Rolle des Hosts übernimmt.
In einem Peer-to-Peer ist es allerdings so, dass jeder Client die ausgehenden Daten über gemachte Aktionen wie zum Beispiel gehen, springen, schießen an alle anderen Clients schickt, damit eben auch die Mitspieler „sehen“ was man macht, was natürlich zu einem riesigen Aufkommen von Traffic führt. Daher ist diese Art des Netzwerks nur für Spiele geeignet, an der nicht viele Leute gleichzeitig teilnehmen.
Für eine persistente (weiter bestehende) Welt ist das natürlich auch ungeeignet, weil wenn nun auch der letzte Spieler das Spiel verlässt, löst sich die Welt in Luft auf und läuft nicht weiter.
In einem Peer-to-Peer-Netzwerk ist es also Notwendig dass jeder Client Verbindung zu jedem anderen Client und auch Informationen über diesen besitzt.


1.4 Client-Server Netzwerke

Bei einem Client-Server Netzwerk verbindet sich der Computer mit einem zentralen Rechner, dem Server, der alle notwendigen Informationen für einen bereithält. Dieser Server ist für die Clients erreichbar und handelt den ganzen Datentransfer von einem zentralen Punkt aus. Nachdem ein Client sich nun verbunden hat, sendet er seine Daten nur zu dem Server. Ein direkter Transfer zu einem anderen Client ist nicht möglich.
Auf ein Spiel bezogen sieht es nun so aus, dass der Server die Spielwelt bereit hält, NPCs steuert, die Anfragen der Spieler bearbeitet und entsprechende Antworten an die Clients sendet. Will nun ein Spieler sich bewegen schickt der Client des Spielers die Anfrage an den Server ob diese Bewegung erlaubt ist. Der Server validiert die Anfrage und schickt entweder ein OK oder nicht OK an den Client woraufhin dieser die Aktion durchführt oder eben auch nicht.
Des weiteren wird die Information über die Aktion des Spielers an alle anderen Clients geschickt die davon betroffen sind, also die Spieler die diese Aktion sehen oder erleben können. (Einen Schuss sieht man ja nicht nur)
Der Server in einem Spiel funktioniert also als Host für die Spielwelt, steuert diese und validiert die Aktionen der Spieler und hält deren Daten bereit.
Grob umrissen mal wieder…. 
Für unsere persistente Welt, die natürlich auch weiter laufen soll wenn wir nicht da sind und mit der auch Interaktion herrschen soll ist die Client-Server-Technik dann natürlich die einzige Wahl.
Als Server darf man hier nicht nur einen einzelnen Rechner verstehen. Ein Gameserver KANN natürlich auch nur ein Rechner sein, jedoch ist es bei MMOs so, dass dieser Server aus einem Verbund von Rechnern (auch ein Netzwerk) besteht, die sich die Arbeit und die Last teilen.


1.5 Router und Firewalls

Zuvor habe ich schon ein paar Mal die Router erwähnt. Router machen nichts anderes als den Datenverkehr von einem Netzwerk in ein anderes zu steuern und zu regeln. So besteht über einen Router die Möglichkeit, dass sich mehrere Computer die an diesem angeschlossen sind in das Internet oder mit einem anderen Netzwerk verbinden können, ohne dass jeder eine eigene Leitung zu diesem Netzwerk braucht. Der Router managet die ganzen Verbindungen und sorgt dafür, dass jeder auch das Datenpaket bekommt, das für ihn bestimmt ist.
Aus dem Netzwerk heraus zu dem man sich verbunden hat ist nicht zu erkennen wie viele Rechner sich nun hinter dem Router befinden und tatsächlich mit dem Internet verbunden sind, da von außen immer nur der Router zu sehen ist.
Der Router bekommt eine IP-Adresse zugeteilt von dem Netzwerk zu dem er sich verbindet. Die hinter dem Router befindliche Computer allerdings benutzen ihren eigenen Adressraum.
So kann es sein, dass sich irgendwo im Internet ein Computer befindet der die gleiche IP-Adresse besitzt wie ihr in eurem lokalen Netzwerk. Da sich beide aber nicht den gleichen Adressraum teilen, kommt es zu keinen Irritationen und jeder kann eindeutig angesprochen werden.
Das mag zu solchen Spielchen verleiten wie, dass man ja an einen Router 256^4 – 1 Rechner verbinden könnte und eben 256^4 Router dann miteinander verbinden könnte da es ja unterschiedliche Adressräume sind in denen man sich bewegt.
Soweit ist das richtig…
wink.gif
Aber viel Spaß bei der Stromrechnung und wie viele Rechner hat dann jeder Erdenbürger?
Router sind also nichts anderes als die Verkehrslotsen die den Daten den richtigen Weg weisen, dass auch jeder das bekommt was er will und ihm zusteht.
Firewalls sollen der Sicherheit der Computer in großen Netzwerken dienen. Hierzu kontrollieren sie den Datenverkehr der zwischen Computer und dem Netzwerk läuft. Ich habe ja bereits erklärt, dass die Kommunikation einem Frage-Antwort-Spiel gleicht. Nun, die Firewall kontrolliert genau das. Eine meist Hardware gestützte Firewall lässt nur die Daten zum Computer „durchdringen“ die auch durch diesen angefordert wurden. Sollte nun jemand versuchen unaufgefordert Daten an den Computer zu schicken stellt die Firewall sich stur und meint nur „Hey, Du kummst hier nitt rain!“. Viele Firewalls bieten auch die Möglichkeit den ausgehenden Datenverkehr zu kontrollieren, so dass auch ungewollte „Anfragen“ nicht raus geschickt werden und Softwarehersteller nicht als Jäger und Sammler dienen können, wenn ihre Software „nach hause telefoniert“.
Weitere Details wie eine Firewall das macht, und was das für uns als Spieler heißt, erfahrt im Abschnitt 2.2.
 
Zuletzt bearbeitet von einem Moderator:
2. Netzwerktheorie


2.1 Protokolle

Damit Computer überhaupt miteinander „reden“ können, sich verstehen, gibt es mehrere Protokolle die die Regeln für diese Kommunikation darstellen. Hier führe ich drei der bekanntesten auf. (Ja ja, Apple-User, steinigt mich weil ich euer Protokoll nicht aufführe.)

NetBEUI war Teil des Microsoft-Protocal-Stack und benutzte Hardwareadressen (Mac-Adressen) so dass es ohne künstliche Adressen wie TCP/IP auskam und sehr schnell war. Allerdings besaß es den Nachteil, dass es nicht routbar war, also nicht für größere Netzwerke geeignet und findet heute kaum noch Verwendung.

IPX/SPX ist ein Protokoll, welches von Novell entwickelt wurde. Es ist routbar, erzeugt allerdings einiges an zusätzlichem Datenaufkommen. Innerhalb eines lokalen Netzwerkes wurden die Datenpakete direkt an die Hardwareadresse gesendet. Wurde eine Hardwareadresse erkannt, die außerhalb lag, wurde nach einem Router gesucht, der Verbindung zu dieser Adresse bietet und die Daten an dessen Hardwareadresse geschickt. Der Overhead entstand dadurch, dass jeder Router in Intervallen sämtliche Adressen, die über ihn erreichbar waren an alle verbundenen Rechner schickte.

TCP/IP ist das Protokoll unserer Wahl. Es ist eines der ältesten und das erfolgreichste Protokoll für Netzwerke. IPv4 ermöglicht es über 4 Milliarden Computer in einem Netzwerk zu registrieren und anzusprechen. Hierbei werden Adressen verwendet die aus 4 Zahlen von 0-255 reichen. Jeder hat bestimmt schon mal etwas von einer IP-Adresse gehört und auch Zahlenkonstrukte wie 192.168.1.254 sind jedem irgendwie geläufig. Diese Adressen machen es möglich einen Computer in einem Netzwerk eindeutig zu identifizieren. TCP/IP ist ein sehr universell einsetzbares Protokoll und daher ist es auch nur mit einiger Konfiguration zu benutzen. Jedoch bieten zahlreiche „Hilfsprotokolle“ wie DHCP dort Unterstützung an, die es ermöglichen TCP/IP automatisch zu konfigurieren. Durch seine universelle Einsetzbarkeit setzte es sich sehr schnell durch und wird inzwischen nicht nur von Computern sondern auch von Telefonen, Druckern, und Radios benutzt und eine Erweiterbarkeit durch den offenen Standard des Protokolls ist sehr einfach möglich, so dass vielleicht bald sogar eure Kaffeemaschine über TCP/IP angesprochen werden kann. (Gruß nach Mainz, ich hoffe ihr denkt noch an unseren Internet gesteuerten Kaffeeautomaten!)

Diese Protokolle ermöglichen uns also, dass die Computer und diverse andere Geräte Informationen miteinander austauschen.


2.2 Adressen und Ports

Wie bereits in Abschnitt 1 erwähnt besitzt jeder Rechner der im Internet ist, beziehungsweise der Router der mit dem Internet verbindet eine eindeutige Adresse, die IP-Adresse, damit er im Netz identifiziert werden kann. Diese externen IP-Adressen werden durch den Provider über den ihr euch verbindet, automatisch vergeben und ändern sich mit jeder neuen Verbindung (dynamische IP-Adresse). Es sei denn ihr habt eine feste Verbindung wie sie in vielen Firmen genutzt wird, dann ist es eine feste (statische) IP-Adresse.
Wenn ein Computer doch über die IP-Adresse gefunden wird, kann man doch da einfach Daten hinschicken, oder? Nun, da kommen die Ports ins Spiel! Ports sind nichts anderes als Kanäle in denen die Kommunikation läuft. Vielen werden bestimmt die Ports 80 für http, 8080 für https und 21 für FTP sein. Hier http://meineipadresse.de/html/ip-ports.php gibt es eine Liste über die bereits für die „normale“ Kommunikation reservierten Ports; nur ein paar der 65535 möglichen Kanäle.
Da setzte nun unsere Firewall an. Sie verschließt genau diese Kanäle, so dass von außen nichts unaufgefordert hinein kommt. Stellt es euch wie eine Türe vor, die nur auf einer Seite einen Griff zum öffnen hat. Sendet ihr nun Daten nach draußen, öffnet die Firewall diese Tür, stellt einen Türsteher hin und wartet auf Antwort von genau der Adresse, an die ihr Daten geschickt habt. Der Türsteher weißt alle anderen ab, die nicht die richtige Adresse haben. Diese Antwort kann eine HTML-Seite sein, aber auch einfach nur ein „OK, ist angekommen!“. Danach wird die Tür wieder geschlossen. Für die nächste Anfrage beginnt das Spiel von vorne. Die ganze Magie einer einfachen aber sehr effektiven Firewall.

Nun ist es bei manchen Spielen so, dass sie auch unaufgefordert Daten schicken „müssen“. Aber nach dem oben erläuterten Prinzip würde das ja nicht funktionieren. Was kann man also machen?
Über die meisten Spiele erfährt man in Foren oder Support-Dokumenten welche Ports das Spiel benutzt. Hat man unerklärliche Verbindungsabbrüche, oder kommt vielleicht sogar gar keine Verbindung zustande, kann es daran liegen dass bestimmte Ports auf denen der Server dem Client „unaufgeforderte“ Pakete schickt, verschlossen sind. Um dennoch spielen zu können muss man nun Löcher in seine Firewall graben. Man öffnet also diese Ports manuell. Keine elegante, aber dann die einzige Lösung. Allerdings öffnet es auf diesen Ports dann auch schnell Tür und Tor für irgendwelche Attacken.
Es ist einfach ein ungeschriebenes Gesetz, dass man sich für die Netzwerkkommunikation ein System überlegt, dass der Benutzer eben nicht seine Firewall-Einstellungen ändern muss.
Daher senden viele Spiele in Intervallen einfach kleine Anfragen hinaus die dann die Tür kurz aufmachen und so diese Serverpakete empfangen werden können. So bedarf es keiner Umkonfiguration und die Sicherheit bleibt gegeben. Allerdings erfordert das mehr Porgrammieraufwand und Planung.
Wie man genau Ports öffnet findet ihr in der Anleitung eures Routers oder in der Hilfe zu eurer Firewall.


2.3 Verbindungsaufbau und Kommunikation

Wie stellt ein Client nun eine Verbindung zum Server her? Das ist recht einfach. Der Client schickt eine Anfrage zum Server der auf einem bestimmten Port (bind) eben genau auf dies Verbindungsanfrage wartet, sein Ohr aufsperrt (listen-Funktion). Sollte das passende Protokoll gefunden sein, binden sich Server und Client aneinander (accept-Funktion) und schon kann die Kommunikation losgehen.
Server und Client kennen sich nun und es besteht eine Verbindung zwischen den beiden ähnlich dem Draht beim Dosentelefon.
Über einfache Senden und Empfang-Funktionen können nun Datenpakete hin und her geschickt werden. Die eine Seite verpackt die zu sendenden Daten in ein Paket, verschickt sie und die andere Seite empfängt das Paket, packt sie aus und guckt was damit zu tun ist.
Das ist im Endeffekt alles was der Netzwerkcode tun muss. Eine Verbindung herstellen, Datenpakete schicken, empfangen, auf Vollständigkeit und Reihenfolge achten, wieder zusammensetzen, Verbindung am Ende trennen.
Man kann das mit der Bedienung in einem Restaurant vergleich.
Ihr steht vor einem bestimmten Restaurant (bind) und der Portier (listen) schaut ob ihr für das Etablissement entsprechend gekleidet seid (Protokoll). Lässt er euch herein und weiß euch einen Tisch zu (accept) habt ihr die Verbindung.
Da ihr ja was essen wollte, gebt ihr der Bedienung eure Bestellung (Paket). Sie läuft Richtung Küche (Anfrage senden). Die Küche nimmt die Bestellung entgegen (empfangen), liest die Bestellung (Paket entpacken) und fängt an entsprechend das Gericht zu kochen. (Validierung).
Das Essen ist fertig und wieder kommt die Bedienung ins Spiel. Die Küche richtet das Essen auf dem Teller an (Paket), übergibt es der Bedienung und die bringt das Gericht an den Tisch (Antwort senden). Nun habt ihr das Essen am Tisch, packt euch das Besteck was ihr braucht (Paket entpacken) und fangt an zu essen. 
Ihr seht also, dass der Netzwerkcode im Grunde genommen nichts wirklich Aufregendes ist und für Probleme die kleinste Fehlerquelle. Sollten Lags aufgrund der Verbindung auftreten, liegt es wohl eher an den Verbindungsknoten als am eigentlichen Netzwerkcode.
 
Zuletzt bearbeitet von einem Moderator:
3. Client-Server


3.1 Aufbau einer Client-Server-Verbindung

Gehen wir ein wenig ans eingemachte. Was passiert im Detail wenn der Client eine Verbindung zum Server herstellt?
Basis für alles ist, dass beide Seiten ein und die selbe Sprache sprechen, also das Protokoll über das der Server und der Client miteinander kommunizieren.
Eine einfach Möglichkeit eine Verbindung herzustellen ist über so genannte „Sockets“. So mancher wird schon mal was von der winsock.dll gehört haben, die diese Funktionalität für Windows bereitstellt.
Sockets bieten die Grundfunktionen zur Verbindungsaufnahme und zum senden und empfangen von Daten. Sie arbeiten auf einer sehr niedrigen Ebene, so dass es einiges an Programmierarbeit bedarf darüber eine passende Netzwerkkommunikation zu verwirklichen, allerdings lohnt sich der Aufwand, weil man dort Einfluss auf alles nehmen kann und systemunabhängig ist.
DirectPlay als Teil von DirectX wäre eine andere Möglichkeit, allerdings hat man hier das Manko, dass man auf Windows auch auf Serverseite angewiesen wäre oder sich eine Schnittstelle bastelt die die Datenpakete von DirectPlay verarbeiten kann in all seiner Vielfalt. Da mache ich doch lieber über Sockets alles selber, weiß dafür genau was passiert und habe auch genau das was ich haben will.
Nun bereitet der Client erstmal alle Daten vor die er für die Verbindung braucht. Welches Protokoll verwendet werden soll, zu welcher Adresse verbunden wird und auf welchem Port.
TCP sichert durch seinen Aufbau, dass von einem Datenstrom wirklich alle „Stückchen“ in der richtigen Reihenfolge, vollständig und auch nur einmal ankommen. Es beinhaltet dafür eigene Kontrollmechanismen.
Ein typisches Datenpaket von TCP/IP beträgt 1500 Bytes. Da TCP und IP jeweils einen Header von 20 Bytes belegen (Der Header beinhaltet weitere Informationen über das Datenpaket) und auch das PPP (Point-to-Point-Protokoll) von DSL noch mal 8 Bytes belegt, kommt man also pro TCP/IP-Paket auf ein Nutzvolumen von maximal 1452 Bytes. Hat man jetzt allerdings Daten die dieses Maximum überschreiten, werden diese in mehrere TCP/IP-Pakete zerlegt und getrennt versendet. Die Headerinformationen ermöglichen aber das korrekte Zusammensetzen der Daten an der Empfängerseite so, dass das kein Problem darstellt. Dabei können die einzelnen Pakete sogar unterschiedliche Wege durch das Internet nehmen, bevor sie beim Empfänger ankommen.
Nun zum Aufbau der Verbindung. Eine Verbindung wird bei TCP/IP über einen sogenannten 3-Wege-Handshake hergestellt. Sinn der Sache ist es eine Synchronisation zwischen Client und Server herzustellen auf der dann kommuniziert wird.
Der Client schickt dazu an die Server-Adresse auf einem spezifizierten Port eine SYN-Paket. (SYN vom englischen Synchronize) Wartet (hört) der Server auf diesem Port nach genau diesen Paketen schickt er als Antwort an den Client ein SYN/ACK-Paket. (ACK von Acknowledged) Er stimmt also mit diesem Paket dem Verbindungsaufbau zu und schickt seinerseits an den Client eine Synchronisationsanfrage. Diese wird vom Client wiederum mit einem ACK-Paket beantwortet und die Verbindung ist hergestellt.
Über diese Verbindung ist es nun möglich Datenpakete zu verschicken und zu empfangen mit der Sicherheit dass auch alles ankommt.
UDP als Protokoll in Kombination mit IP, also UDP/IP ermöglicht ein verbindungsfreies und damit auch schnelleres versenden von Daten, was sich für kleinere Datenmengen sehr gut eignet, allerdings gehen diesem Protokoll die Kontrollmechanismen für die Sicherheit der Zustellung ab, so dass man eigene Mechanismen einbauen müsste um zu gewährleisten, dass auch alles in der richtigen Reihenfolge und vollständig beim Empfänger ankommt.


3.2 Vor- und Nachteile

Ganz klarer Vorteil einer Client-Server-Verbindung ist es, dass ein dedizierter Rechner oder Cluster für die Verwaltung der Informationen zur Verfügung steht und dieser nicht auch noch mit den Client-Funktionen belastet ist. So besteht die Möglichkeit einer Spezialisierung und der Server kann so viel mehr Clientverbindungen aufrecht erhalten und verwalten.
Ebenso ist es auch möglich diesen Server eben permanent zur Verfügung zu halten, da er nicht den üblichen Veränderungen eines Clientsystems unterliegt (Ich denke da an die ganzen vielen Sachen, die man doch so an seinem PC ausprobiert. Neustarts eingeschlossen!)
Nachteil ist allerdings, dass wenn der Server ausfällt, das Spiel und die Verbindung für alle endet, da der Client selbst nicht die Verwaltungsaufgaben durchführen kann und ihm die Daten des Servers fehlen.
Allerdings kann man diese Ausfälle minimieren wenn man entsprechende Failsafe-Systeme bereit hält. So ist eine Verfügbarkeit von fast 99% doch gut zu erreichen. Alles kann man nicht abdecken aber ich denke mit dem 1% kann jeder von uns gut leben.

Betrachtet man hingegen eine Peer-to-Peer-Verbindung ist es so, dass jeder Client-Rechner auch gleichzeitig die Funktion des Hosts übernehmen kann. Allerdings sind dann nur sehr selten Spiele mit mehr als 40 Spielern möglich, da die Last auf dem Hostrechner doch enorm ist, so dass die meisten Spiele, welche in einem P2P-Netzwerk laufen auf 4-12 Spieler begrenzt sind.
Fällt hier jedoch der aktuelle Host aus, übernimmt automatisch der nächste Client-Rechner in der Kette die Funktion des Hosts und das Spiel kann ungehindert weiter gehen, bis auf die Tatsache, dass der eine Spieler der den Host bisher betrieb, nun fehlt. (Wohl ein Schisser der gesehen hat, dass er verliert).

Für ein MMO kommt daher nur eine Client-Server-Verbindung in Frage da es sich um eine persistente Welt mit sehr vielen Mitspielern handelt und die Aufgaben zu umfangreich sind um von einem einzelnen System bewältigt werden zu können.


3.3 Stolpersteine

Wo sind nun die Stolpersteine in der Client-Server-Verbindung?
Zunächst sollte das „Rohr“ zum Internet entsprechend groß sein um die eingehende Datenmenge auch bewältigen zu können. Ein MMO mit einem 56k-Modem betreiben zu wollen mag „innovativ“ sein, jedoch könnt ihr davon ausgehen, dass dann mehr als 8 Mitspieler dann in den Bereich einer Utopie gehören. 
Selbst die aktuellen Kabel- oder DSL-Verbindungen die man zu hause hat sind dafür noch zu klein. Also kann man eine Anbindung zum Internet für den Betrieb der Server nicht groß genug wählen wenn man viele Clients bedienen will.
Die Verbindung auf Client-Seite ist da eher schon zu vernachlässigen, wenn auch viele schon eine Dual-ISDN-Verbindung (128k) als Minimum voraussetzen.
Firewalls bieten uns einen guten Schutz für unsere Systeme, nur müssen diese auch entsprechend eingestellt sein um uns die Möglichkeiten zur Kommunikation zu bieten, die wir wollen und uns trotzdem den gewünschten Schutz bieten.
Nicht richtig eingestellt, verhindern sie allerdings einen ungetrübten Spielgenuss. Das kann bei einer langsameren Verbindung anfangen und bis hin zur Unmöglichkeit einer Verbindung führen. Daher ist es ratsam sich mit der Firewall auseinander zu setzen.
Was kann noch unsere Verbindung beeinträchtigen? Filesharing-Programme sind ja sehr beliebt doch wenn man an einem MMO teilhaben will sollte man sie zumindest während der Spielzeit möglichst vermeiden, da sie die Bandbreite des Internetzugangs doch extrem verringern können. Viele Programme bieten eine Einstellmöglichkeit um die Bandbreite für das Tool zu limitieren, doch die funktioniert oft nicht einwandfrei.
Ich empfehle einfach während des Spielens sämtliche Filesharing-Tools aus zu machen und am besten noch die Verbindung zum Internet einmal zu trennen und neu herzustellen, so dass man sicher sein kann, dass alle oben beschriebenen Verbindungen wirklich getrennt sind und nicht noch irgendwelche „Leichen“ im Hintergrund unsere Bandbreite eingrenzen.
Also, achtet auf eure Einstellungen und auf das was im Hintergrund läuft, damit eine möglichst freie, aber auch sichere Verbindung während des Spiels herrscht.
 
Zuletzt bearbeitet von einem Moderator:
4. Das Serversystem

4.1 Struktur eines Gameservers für MMOs
Die meisten stellen sich unter einem Gameserver meist immer einen einzelnen Computer vor, der alle Daten für ein Spiel bereithält, die Kommunikation der Spieler untereinander steuert, die KI der NPCs abarbeitet, an alle Spieler die Informationen über andere Spieler (Aktionen, Aussehen,….) weiter gibt und überhaupt alles macht was wir uns so vorstellen können was mit der Spielwelt zu tun hat.
Da tritt der erste Verständnisfehler auf. Als Server muss man eigentlich das Programm verstehen, was eben genau diese Tätigkeiten erledigt. Es kann sich auch um mehrere Programme handeln die untereinander interagieren. Dabei ist es egal ob das Programm auf einem oder auf mehreren Computern läuft.
Während bei früheren Multiplayerspielen wirklich noch ein Computer für die meisten Funktionen reichte, ist bei der heutigen Komplexität so was nicht mehr zu bewältigen.
Ein Gameserver für ein MMO teilt sich daher auf einen Cluster mehrerer Rechner auf. Das ist ein Verbund von Computern die in einem Netzwerk zusammenarbeiten und in vielerlei Hinsicht dann als ein Computer gesehen werden können.
Doch wie sieht das Idealerweise für ein MMO aus?

Zunächst wäre dort der Loginserver. Dieser ist dafür da die Loginanfragen zu bearbeiten, Benutzerdaten auf Richtigkeit zu überprüfen und dann den Spieler auf den richtigen Gameserver umzuleiten. Man trennt dies von den Gameservern aus dem Grund, weil es damit den Datenverkehr von den eigentlichen Gameservern nimmt und die so ihrer eigentlich Arbeit nachgehen können. Zusätzliche Aufgaben die der Loginserver noch übernehmen kann sind der Abgleich von Patchstand und auch die Bereithaltung von Kurzinformationen die der User beim Login dargestellt bekommt.

Die Datenbank-Server – Sie speichern und sichern die Daten über die einzelnen Charaktere und alles was mit diesen zu tun hat. In einer veränderlichen Welt halten sie die Veränderungen fest, den aktuellen Status und stellen sie den Gameservern auf Abruf zur Verfügung. Preise für Gegenstände von NPCs, Auktionen im Auktionshaus, Charakterwerte und vieles mehr liegen hier als rohe Daten bereit.
Oft ist es so, dass mehrere Server parallel laufen, also die gleiche Arbeit verrichten um so eine erhöhte Datensicherheit zu gewährleisten. So würde selbst bei Ausfall eines Systems, dass Backup-System noch einen reibungslosen Ablauf gewährleisten.

Die Gameserver – die Arbeitstiere
Wie auch die Datenbank-Server bestehen diese bei aktuellen MMOs aus Clustern in denen sich die Computer die Arbeit teilen. In einem zonenbasierten oder instanzierten MMO werden die Zonen auf unterschiedliche Server aufgeteilt um so eine gleichmäßige Auslastung zu schaffen und nicht ein Server trocken läuft, während ein anderer zusammenbricht. Diese Verteilung kann entweder statisch sein, so dass fest definiert ist, welcher Server für welche Zone zuständig ist, als auch dass es dynamisch sein kann und die verwalteten Zonen pro Server flexibel zugewiesen werden können. So ist es möglich, dass ein Server auch mal mehrere leere Zonen gleichzeitig verwaltet, als auch dass eine stark besuchte Zone mal ganz alleine auf einem Server läuft, oder gar auf zwei Server aufgesplittet wird. Dies ist Aufgabe des Loadbalancing so dass kein Server bis an die Schmerzgrenze (Absturz) belastet wird.
Was macht der Gameserver? Jede Aktion die ein Spieler machen will, wird vom Gameserver gegengeprüft. Jeder Schritt, den ein Spieler machen will, wird geprüft, jede Aktion, ob sie erlaubt ist oder nicht. Er empfängt die Pakete über die gewünschten Aktionen, verwaltet die Chatnachrichten und versendet sie an die entsprechenden Spieler, zieht alle für die Spieler notwendigen Informationen aus der Datenbank und stellt sie den Spielern zur Verfügung.
Er steuert die NPCs, übernimmt wie in WAR eine Kollisionskontrolle und hält die Welt am leben!!!! Dafür bedarf es verständlicherweise einiges an Speicher und Rechenleistung.
Für jeden Spieler der aktiv ist wird ein aktueller Datensatz im Arbeitsspeicher gehalten, ebenso wie die Daten um die Weltbeschaffenheit, Aussehen und alles was mit ihr zu tun hat.
Will ein Spieler nun einen Schritt nach vorne gehen, schickt der Client ja eine Anfrage an den Server ob dieser Schritt erlaubt ist. Anhand der Position des Spielers, den Daten der Spielwelt und der gewünschten Bewegung überprüft der Gameserver nun die Aktion und sendet als Antwort ein „OK“ oder ein „nicht OK“ an den Client zurück und erst dann wird die Aktion ausgeführt.
Nun kann man sich vorstellen was für ein Datenaufkommen herrscht wenn mehrere hundert oder tausend Spieler sich auf einem Server tummeln. Dies alles muss bewältigt werden und das möglichst sofort und in der richtigen Reihenfolge. Umso mehr Aufgaben ein Gameserver bewältigen muss, umso größer muss er logischerweise dimensioniert werden.
Daher empfiehlt es sich teilweise die Aufgaben zu splitten und zu verteilen. Ein extra Server für die KI zur Steuerung der NPCs, ein weiterer Server der nur mit der Kollisionsabfrage beschäftigt ist wären solche Möglichkeiten um die Last zu verteilen.
Das resultiert zwar alles in Geld und zusätzlichem Programmieraufwand, jedoch zahlt es sich später in zufriedenen Kunden wieder aus.
Ebenso gehört ein Failsafe-System eigentlich zum guten Ton, falls der aktuelle Spielserver ausfällt, so dass die Kunden ungehindert weiter spielen können.
Natürlich kann man nicht gegen alles gewappnet sein, jedoch kann man das Risiko minimieren.


4.2 Ausstattung und Aufbau
Nachdem ich umrissen habe was so ein Server leisten muss kann sich jeder, der auch nur am Rande Ahnung von Computer hat, vorstellen wie so ein System aussehen muss. Mit einem Client-PC ist das nicht zu vergleichen.
Bei der Ausstattung eines Servers stehen Rechenleistung, Arbeitsspeicher und eine schnelle Netzwerkverbindung im Vordergrund. Festplattenspeicher ist da nahezu zu vernachlässigen. Geschwindigkeit und Stabilität sind hier die Zauberworte.
Was die Hardware angeht will ich hier nicht zu sehr ins Detail gehen, nur kann sich jeder vorstellen, dass hier das beste grad gut genug ist.
Um eine Vorstellung gleich zu nehmen, nein, ein Server braucht keine gute Grafikkarte, da er ja keine grafische Darstellung wie auf Spielerseiten braucht. Er muss keine Spieler darstellen, keine Texturen laden, nichts. Dem Server reichen die reinen Geometriedaten der Welt und der Charaktere um seine Arbeit zu erledigen. Alles was das rein visuelle angeht ist da egal.
Daher ist es noch nicht mal notwendig, dass Client und Server das gleiche Betriebsystem besitzen. Client auf Windows und Server auf Linux sind also nicht selten anzufinden da die Rohdaten ja von beiden gleich bearbeitet werden können.
Der Aufbau variiert von Spiel zu Spiel. Die einen benutzen pro Zone einen Computer als Gameserver, andere richten Cluster ein und verteilen so die Last auf mehrere Rechner und die nächsten benutzen gar je nach Zonenbelastung mehrere Cluster für eine Spielwelt. Der Spieler selbst kann nicht erkennen worauf nun seine Spielwelt läuft. Er kann nur hoffen, dass es ausreichend groß dimensioniert ist. Das was Spieler so gemeinläufig als „Server“ bezeichnen ist nichts anderes als eine Instanz der Spielwelt. Ob nun mehrere auf einem Cluster laufen, jede auf einem eigenen Rechner oder wie auch immer, ist dabei unerheblich solange genug Leistung für die zu bewältigenden Aufgaben zur Verfügung steht.

Kleiner Nachtrag noch zu Gameservern und Grafikkarten. Die Verwendung von schnellen Grafikkarten kann in der nahen Zukunft auch für Gameserver von Interesse werden, da die GPUs auf den Grafikkarten in ihrer Komplexität und in ihrer Leistungsfähigkeit jede im Handel zu kaufende CPU bei weitem übersteigen.
Eine Auslagerung von Rechenintensiven Operationen auf eben diese GPUs wäre eine Möglichkeit die Leistungsfähigkeit der Gameserver noch zu erweitern. Ich denke hier an die Computeshader oder wie es bereits gemacht wird Physikberechnungen auf die GPU auszulagern. PhysX von Nvidia hier als Beispiel. Ein Gameserver mit mehreren schnellen Grafikkarten wäre dann in der Lage sehr komplexe Berechnungen (Kollisionsabfrage ;-) ) sehr schnell durchzuführen.


4.3 Unterschiedliche Arten von Gameservern

Kurz seien hier die möglichen unterschiedlichen Arten von Gameservern aufgeführt.
Viele kennen ja die üblichen Ego-Shooter-Games und die im Internet verfügbaren Gameserver. Diese stellen nichts anderes dar als „Treffpunkte“ zum gemeinsamen spielen um es so jedem zu ermöglichen gegen andere Leute zu spielen, sich zu messen und so Teil der Community zu werden. Diese Gameserver stellen nur Spiel“räume“ zur Verfügung, managen die Spielerverwaltung, den Datentransfer von und zu den Spielern und führen nur rudimentäre Kontrollen durch. Cheatkontrollen, Spielversionen damit es zu keinen Diskrepanzen untereinander kommt und kleinere Weltkontrollen.
Diese Gameserver können teilweise recht klein dimensioniert sein, weil der Anspruch an Rechenleistung an solche Systeme recht klein ist wenn sich vielleicht bis zu 40 Spieler während eines kurzen Spiels auf diesem aufhalten. So ist es möglich dass auf einem einzelnen Computer ohne Probleme mehrere Spielserver laufen können ohne dass man es merkt. Und wird das Spiel verlassen, endet die Kontrolle des Servers.
MMO-Server stellen da ganz andere Anforderungen. Sie müssen wesentlich größere Mengen an Daten bewältigen, mehr Spieler verwalten und eine ganze künstliche Spielwelt am Leben erhalten. Sei es der Ablauf von Tag und Nacht, Verhalten von NPCs, Events und vielem mehr. Auch diese Server sind ein „Treffpunkt“ aber eben auch viel mehr. Der Aufwand eine künstliche Welt am laufen zu erhalten ist wesentlich höher als nur für einen kurzen Zeitraum die Instanz einer Spielzone. Immerhin läuft diese Welt auch weiter, machen sich Auswirkungen bemerkbar, selbst wenn man gerade nicht online ist und aktiv in dieser Welt.
Während wie schlafen bleibt die Welt ja auch nicht stehen.
Und über sämtliche Abläufe hat ein MMO-Server die Kontrolle, spult sie ab, agiert und reagiert.
 
Zuletzt bearbeitet von einem Moderator:
5. Der Clientrechner


5.1 Technische Komponenten

Die meisten wissen heutzutage woraus ein Client-Rechner besteht. Mainboard, CPU, Grafikkarte, Soundkarte, Arbeitsspeicher, Festplatte und DVD-Laufwerk. Die Entwicklung in den Bereichen geht so rasend schnell, dass man sich bei einem Neukauf schon beeilen muss um nicht ein bereits veraltetes Gerät zu haben, wenn man zur Haustür hinein kommt.
Doch ist es nicht immer einfach die richtigen Kombination zu finden. Man hat die Wahl zwischen Rechnern von der Stange und individuell zusammen gestellten Rechnern. Verlässt man sich da auf die Fachkenntnis eines IT-Kaufmanns oder eignet man sich selbst das Wissen an und hofft das richtige zu treffen?
Im allgemeinen sollte man darauf achten, dass die Komponenten harmonieren und man eine Erweiterbarkeit für die Zukunft nicht außer Acht lässt, da ein kompletter Neukauf viel teurer kommt, als wenn man vorher in Hinblick auf das erweitern ein paar Euro mehr investiert.
Aber gehen wir die einzelnen Komponenten durch und betrachten sie in Hinblick auf Kosten und Funktionalität.
Fangen wir mit der CPU an, da sie das Entscheidungsmerkmal für viele ist. Die Wahl der CPU entscheidet über das Mainboard und den zu verwenden Speicher. Das Mainboard dann über die Grafikkarte.
Was bietet der Markt aktuell? Eine fast unüberschaubare Masse an CPUs aus den Lagern von Intel und AMD. Da sind die Mehrkernprozessoren von AMD, die X2, X3 und X4, Phenom II, dann die Prozessoren von Intel, Core2, Core2 Duo und Quad und der Core i7.
Doch welchen nehmen?
Im Endeffekt entscheidet nur der Geldbeutel über die Leistung. Im Internet gibt es zahlreiche Testberichte und Vergleiche über die Prozessoren so dass man schnell sieht welchen Prozessor man sich zulegen will.
AMD Prozessoren ab einem X2 (2 Prozessorkerne) und eine Core2 Duo bieten schon genug Leistung selbst um aktuelle Spiele flüssig darstellen zu können und das zu einem günstigen Preis. Alles darüber kann man gut und gerne als eine Investition in die Zukunft betrachten.
Wobei die Funktionen eines Quadcore (X4, Phenom II, Core2 Quad oder Core i7) noch nicht annähernd genutzt werden. Aktuelle Spiele benutzen meistens nur 2 Kerne so dass jeder weitere Kern leer läuft.
Gibt man das Geld für einen Mehrkernprozessor aus so stehen noch reichliche Ressourcen zur Verfügung für weitere Programme wie Teamspeak, diverse Messenger und ähnlichem ohne dem Spiel Ressourcen zu klauen. Vor allem wenn man dann noch über den Taskmanager dem Prozess die CPUs entsprechend zuteilt.
Tip am Rande für die Quad-Leute: Wenn das Spiel 2 Kerne benutzt, dann seht zu, dass ihr es auf 2 physikalische verteilt und nicht auf einen physikalischen und einen logischen Core um das Maximum heraus zu holen. Die Verteilung könnt ihr über den Taskmanager vornehmen.
Ist die Wahl für die CPU getroffen geht es ans Mainboard. Hier bitte nicht aufs Geld schauen. Ein billiges Board wird euch viel an Spaß und Performance klauen, also gebt ruhig etwas mehr Geld für das Board aus. Das Mainboard ist für eure CPU so was wie der Rahmen eines Autos für den Motor. Starker Motor und schwacher Rahmen bringt den Rahmen zum verziehen. Also ein vernünftiges Board ist Pflicht. Unterschiede in den Chipsätzen bestimmen die Leistung und die Möglichkeiten die ihr mit dem Board habt. Sowohl was die Performance lokal angeht als auch die Optionen zur Optimierung.
Der Arbeitsspeicher. Hier gibt es auch wieder einige Faktoren die unsere Auswahl bestimmen. Je nach CPU muss man drauf achten, dass der Speichertyp und die Taktfrequenz passen. Core7 arbeitet nur mit DDR3-Speicher und Core2 mit DDR2 und DDR3. Bei AMD-Prozessoren verhält es sich adäquat.
Hier ist drauf zu achten, dass der Takt des Speichers synchron mit dem Frontsidebustakt der CPU läuft damit keine Wartezyklen entstehen. Bei falscher Einstellung kann es also passieren, dass entweder der Prozessor oder der Speicher eine „Warteschleife“ drehen müssen, weil der Gegenpart noch nicht fertig ist. Und durch diese Warteschleifen kann es im schlimmsten Fall dazu führen dass ein System mit schnellerem Speicher dann doch einen Tick langsamer läuft. Doch nicht nur der Takt des Speichers und die Art sondern auch die Taktzyklen bestimmen die Leistungsfähigkeit. Nähere Informationen hierzu findet ihr auf http://www.tomshardware.de.
Dann die Grafikkarte, hier bestimmt auch nur der Geldbeutel die Leistungsfähigkeit. Aktuelle Nvidia- und ATI-Grafikkarten bringen so viel Leistung und Speicher mit, dass aktuelle Spiele selbst in hohen Auflösungen mit Anisitropischen Filter und Kantenglättung sehr flüssig laufen. Eine GTX260, die schon für knapp 140 Euro zu bekommen ist, liefert mehr Leistung als für die im Moment verfügbaren MMOs notwendig ist.
Viele Leute passen allerdings ihre Grafikkarten nicht der CPU an oder umgekehrt so dass eines dieser Teile immer einen Flaschenhals bildet und das andere ausbremst.
Bei Interesse kann ich später noch Empfehlungen für Kombinationen aufführen, es sei nur erwähnt dass auch diese Geräte nur in der richtigen Kombination optimal funkionieren.
Selbst kleine Festplatten bieten ausreichend Speicher um euer Betriebssystem und einige Spiele aufzunehmen so dass ich keine Größenempfehlung aussprechen will. Allerdings sollte ihr darauf achten, dass die Zugriffszeiten der Festplatte nicht zu langsam sind und der Cache der Platte nicht unter 16MB liegt.
Sind die Zugriffszeiten zu hoch, verzögert sich jedes auslesen von Daten wenn die Platte aus dem Stillstand heraus anläuft um die Daten zu holen.
SSD-Platten scheiden alleine schon aus Kostengründen und aufgrund ihres noch recht geringen Volumens aus.
DVD…. Na ja, nicht wirklich maßgeblich. Da entscheidet der Geschmack und die Funktionen die ihr haben wollt. Selbst Lightscribe-Laufwerke sind schon für knapp 40 Euro zu haben.
Um dann noch schlussendlich die Soundkarte anzusprechen so wage ich zu behaupten, dass für die meisten Spieler die Onboard-Soundkarten einen ausreichend guten Klang haben um vollen Spielgenuss zu bieten und dass die meisten eh nicht den unterschied zwischen der Onboard und einer Profi-Soundkarte hören. Also spart euch das Geld. 
Auf Kühlung, Lüfter und diverse Übertaktungsmöglichkeiten werde ich nicht eingehen. Dafür gibt es zahlreiche Fachforen und ausserdem will ich mit meinem Nebenerwerb ja auch noch etwas Geld verdienen.
 
Zuletzt bearbeitet von einem Moderator:
12.1 Funktionsweise einer Kollisionsabfrage
Warhammer bietet uns allen nun eine Kollisionsabfrage. Durchgänge können geblockt werden, andere Spieler stehen einem im Weg und so weiter. Doch wie funktioniert so eine Kollisionsabfrage?
Ich werde es auf Basis eines so genannten Octrees mit Axis Aligned Bounding Boxes (AABB) erklären, der oft für so was benutzt wird.

Nun, eine Kollisionsabfrage funktioniert in mehreren Stufen um Rechenleistung zu sparen. Nehmt euch mal die Barbie eurer kleinen Schwester und stellt sie euch als euren Char im Spiel vor. Diese Barbie besteht nun aus vielen kleinen zusammengesetzten Dreiecken um die Form zu bilden. Wie ihr euch vorstellen könnte ist es sehr komplex wenn man bei jedem Punkt der Oberfläche schauen will, ob er mit etwas kollidiert, in Kontakt kommt. Nun bedient man sich bei Spielen aber eines einfachen Systems.
Packt die Barbie mal in einen Karton der die Puppe komplett umschließt. Anstatt einer komplexen Form habt ihr nun einen Quader. Packe ich alles in Kartons ist es wesentlich einfach anhand dieser einfachen Formen eine Kollision festzustellen.

Als erstes erfolgt eine Sortierung, dass man eine feste Reihenfolge hat… Nehmen wir einfach mal an es wäre eine Sortierung von vorne nach hinten.

Nun folgt ein wenig Mathematik….
Box A hat folgende Maße:
Breite: 5cm
Tiefe: 5cm
Höhe: 10cm
Und ihr Mittelpunkt befindet sich bei den Koordinaten x: 2,5, y: 2,5 und z: 5

Box B hat die gleichem Maße, und deren Mittelpunkt befindet sich bei folgenden Koordinaten: x: 7,4, y: 7,0 und z:5

Nun mal kurz nachgerechnet wenn ich die Mittelpunkte nehme:
Rand links Box A wäre bei 0 (Mittelpunkt Koordinate – Hälfte der Breite)
Rand rechts wäre bei 5
Rand vorne bei 0
Rand hinten bei 5
Der Boden der Box bei 0 und der „Deckel“ bei 10.

Nun nehmen wir Box B
Linker Rand bei 4,9
Rechter Rand bei 9,9
Rand vorne bei 4,5
Rand hinten bei 9,5
Boden bei 0 und Deckel bei 10.


Box B links < Box A rechts
Box B vorne < Box A hinten
Box B Boden < Box A Deckel

Dreimal dass sich die Dinge überschneiden, also überschneiden sich die Boxen in allen 3 Dimensionen was eine Kollision darstellt.
OK, nun haben wir mal festgestellt, dass dich die Boxen überschneiden, aber müssen sich daher auch die Figuren in den Boxen überschneiden? Immerhin ist ja noch viel Luft drin. Also nicht zwangsläufig.
Was macht man also nun? Man schneidet diese Box wiederum in kleinere Teile, genauso genommen in 8 (OCTREE). So dass ich aus der Box 8 kleinere gleichgroße mache. Also einmal waagerecht in der Hälfte durchteilt und zweimal in der senkrechten. Einmal von vorne und einmal von der Seite!
Nun wird geschaut bei welchen dieser kleineren Boxen sich die größere überschnitten haben. Hat man diese gefunden wird kontrolliert ob sich überhaupt ein Körperteil in dieser kleineren Box befindet.
Ist das nicht der Fall, so hat keine Kollision stattgefunden. Ist es allerdings der Fall geht man weiter… zerteilt diese Box auf welche die Kollision zutraf dann wieder in acht kleinere. Dann wieder die Kontrolle, ob Körperteil in dieser, ja oder nein und das Spiel geht von vorne los. Solange bis man auf Polygon-Ebene prüft. Wie oft man es in kleinere Boxen unterteilt bevor man auf Polygon-Ebene prüft liegt ganz in der Hand der Entwickler.
Es scheint im ersten Moment viel Mathematik und doch sehr viel Rechenarbeit zu sein alles in die Boxen zu unterteilen anstatt direkt auf Polygon-Ebene zu prüfen, doch das täuscht. Direkt anhand einer umgebenden Box eine Kollision ausschließen zu können, erspart mehr Rechenleistung als die „Zerteilung“ kostet. Hinzu kommt, dass man diesen Octree schon im Vorfeld erstellen kann und diesen zusammen mit dem Charaktermodell in der Datei ablegen kann.
Wer sich das so nicht optische vorstellen kann, nehmt doch einfach mal 2 Styroporwürfel, zeichnet eine Figur drauf und zerschneidet die Würfel dann Stück für Stück. Ich denke dann kapiert das System jeder.

Nun, was heißt das für uns in WAR? Bei den großen Keep-Schlachten oder den Raids sind es eben sehr viele Spieler die aufeinander treffen. Das bedeutet der Server muss für jeden Spieler gegen jeden Spieler, der an der Schlacht teilnimmt, überprüfen ob eine Kollision stattfindet.
Anhand der „bounding boxes“ können viele direkt ausgeschlossen werden, aber in dem Getümmel müssen trotzdem einige aufgesplittet werden ob es wirklich zu einer Kollision kommt oder nicht.
Und es sind ja nicht nur die Kollisionen der Spieler untereinander, sondern auch die Kollisionen mit der Welt.
Alles ist in Bewegung, alles kämpft, Spieler machen ihre Eingaben, laufen, schlagen, zaubern!
Alles muss der Server validieren und die Antwort an die Spieler schicken. Ihr könnt euch mit Sicherheit vorstellen was dies für ein Aufwand für den Server ist und dass man da schnell an die Leistungsfähigkeit eines Rechners stoßen kann.
Nur es gibt Licht am Ende des Tunnels…. Die Leistungsfähigkeit einzelner Rechner und damit auch der Servercluster steigt stetig und so denke ich, dass es sehr seitens der WAR-Server keine Performance-Probleme mehr gibt.
 
Zuletzt bearbeitet von einem Moderator:
Da es bisher ja nicht ganz so geklappt hat, hier mal ein paar grundlegende Regeln zum Thread:

1.) Unterlasst Spamm und Off-Topic Posts jeglicher Art!
2.) Auch wenn ihr Dankbar über die Mühen des Threaderstellers seid bitte ich euch dennoch darum Danksagungs-Posts komplett zu unterlassen!
3.) Es wird ausschließlich themenbezogene konstruktive Kritik geduldet! Alles andere hat hier absolut nichts verloren.
4.) Unterlasst "wann kommt Teil X" Posts! Der Threadersteller wird sie nachreichen sobald sie fertig sind.

Selbstverständlich gelten auch hier unsere Forenregeln sowie die Netiquette!
 
Zuletzt bearbeitet von einem Moderator:
Zurück