Die Frage ist für mich jetzt etwas schwierig zu beantworten da ich nur den alten Server-Code, jedoch nicht den neuen kenne.
Ich habe mich jedoch bei Tyroxx (unserem Server Programmierer) schlau gemacht und hoffe die Frage richtig beantworten zu können.
Es gibt einen Hauptthread der über
select() die Daten pollt und verarbeitet. Die Daten werden dann serialisiert und in die Sendepuffer der Clients geschrieben. Daten wie neue Positionen werden dabei nur einmal serialisiert und in die entsprechenden Puffer der umliegenden Clients geschrieben. Am Ende werden alle Daten der Clientpuffe an die Clients gesendet.
Soweit ich informiert bin werden in der jetzigen Form blockierende Aufrufe möglichst vermieden, was eine Verarbeitung in einem Hauptthread ermöglicht. Mir/uns ist jedoch bewusst, dass es späternicht mehr möglich sein wird, alle Informationen im RAM vorzuhalten. Hier werden später wohl noch Threads hinzukommen die für das Nachladen und speichern von Daten nötig sein werden.
Die Sichtbarkeitsprüfung ist an unsere Karten angepasst. Diese sind Tile basiert. Ein Spieler bekommt also nur die Informationen zu seiner Tile und zu den angrenzenden Tiles. Bei dem Wechsel einer Tile werden entsprechende Informationen gesendet. Also welche Spieler/Objekte sind neu, welche müssen gelöscht werden, da sie nicht mehr im Sichtbarkeitsbereich liegen. Ebenso werden andere Clients informiert, dass ein Spieler gelöscht/hinzugefügt wurde.
Desweiteren wird die Welt in mehrere Hauptbereiche aufgeteilt. Diese sind logisch so weit getrennt, dass der Spieler nie direkt wechseln kann. Hier sieht der Spieler einen Ladebalken wenn er diese Bereiche wechselt. Ein Server verwaltet ein oder mehrere dieser Hauptbereiche. So wollen wir die Last auf mehrere Server verteilen. Schön wären angrenzende Hauptbereiche zwischen denen der Spieler ohne Ladebalken wechseln kann. Hier stehen Aufwand und Nutzen jedoch in keinem günstigen Verhältnis für uns,weswegen wir das vorerst nicht versuchen werden.
Ich hoffe die Fragen wenigstens halbwegs beantwortet zu haben.
Sobald wir wieder soweit sind, dass die Spieler auf der Welt miteinander interagieren können (also kämpfen), werden wir den Client wieder zu Verfügung stellen und einen Termin für einen kleinen Lasttest angeben.
Gerade für mich wird es dann sehr interessant zu sehen wie gut sich der neue Server im Vergleich zu dem alten schlägt, da ich ihn ja geschrieben hatte
Ich hoffe der alte wird um Längen geschlagen.
Für diejenigen die es interessiert. Auch der alte Server hatte einen Hauptthread für die Verarbeitung der Netzwerkdaten. Diese wurden jedoch sofort verarbeitet und gesendet. Timer von Spells, sowie die Ausführung Dieser liegen wie die NPC KI in jeweils einem eigenen Thread.
Grüße Chriss