Problem mit MMORPG monstern :: Wie speichern?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

Hi,

wie ist das denn so mit der Last. Ich programmiere gerade ein mmorpg, dass ziemlich groß wird, wie das erste m ( = massive ) schon andeutet :D .
Jetzt habe ich das so gemacht, dass die spieler der clients in einer datenbank gespeichert werden ( mit koordinaten und so).
Ich habe jetzt aber ein Problem mit den Monstern. Die Spieler sollen diese angreifen können, worauf diese zurück angreifen sollen. Ausserdem sollen diese Monster sich zufällig bewegen können. Ich habe mich jetzt gefragt wie ich das programmieren soll.
Soll ich diese Monster und deren koordinaten jetzt auch in einer Datenbank speichern, dann weiß ich aber nicht wie ich die Bewegen soll und ausserdem könnte das lange dauern, wenn ich dann alles aus einer datenbank auslesen muss und diese sachen in instazen der Monsterklassen umwandeln, jedesmal wenn ein Client fragt, mit diesen Instanzen dann berechnungen anstellen und das ergebnis zurück senden. Oder soll ich die alle instanzen in einer Liste speichern, dann kann ich einfach einen neuen thread laufen lassen, der die koordinaten ändert, oder so ähnlich. Dabei weiß ich aber nicht wie das mit der Last ist. Wenn diese Liste jetzt 10.000 einträge oder so hat, geht das dann noch? Wie würdet ihr das denn machen?

Freue mich über ein paar Tips!

Robin
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Vergiss das mal mit der Datenbank. Du machst einen Prozess, der als Server fungiert, und dann Clients. KI-Monster sind dann nix anderes als Clients, computergesteuert eben. Und wie viele von den Viechern du in wie viele Prozesse auslagerst musst du halt rausfinden... schau halt was am besten skaliert :-)
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

Dann habe ich auf dem Server eben eine Liste von Monstern die über andere Prozesse (auch übers Netzwerk) bewegt werden, oder wie meinst du das?
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ich glaube, das erste M steht nicht für viele Monster, sondern für viele Mitspieler - im Gegensatz zu Spielen mit nur einer Handvoll Spieler, z.B. über ein LAN. Wie auch immer, wenn das Spiel "massiv" sein soll, brauchst du glaube ich auch viel Überlegung und Erfahrung und eine passende Architektur. Fehlende Erfahrung musst du durch viele Experimente wettmachen. Der einfache Einsatz einer SQL-Datenbank wäre so ein Experiment. Ob es funktioniert oder nicht kann ich nicht aus Erfahrung sagen, aber mein Bauch sagt würde mir zu einem anderen Ansatz raten.

Ich würde für so ein Spiel einen ständig laufenden Server-Prozess benutzen, der alle notwendigen Daten im Hauptspeicher hält. Wenn man einen Absturz des Systems verkraften können muss, muss man sich überlegen, wie man Änderungen am Spielstand derart protokolliert, dass bei einem Neustand der alte Stand wieder hergestellt werden kann. Vor Jahren gab es mal "Prevayler" mit so einer Idee.

Ein anderer einfacher Weg mag sein, einfach das gesamte Domänenmodell alle paar Minuten mit cpickle abzuspeichern.

Wenn man so etwas nicht selbst machen will, könnte vielleicht Redis ein interessantes Backend sein.

Allerdings glaube ich nicht, dass die größten Probleme wirklich in der Persistenz liegen. Das Spiel muss effizient mit einer großen Zahl Spieler kommunizieren können und muss allen einen konsistente Spielwelt bieten, ohne das es zu großen Verzögerungen kommt. Das Spiel muss zudem fair sein und idealerweise können auch korrupte Clients nicht betrügen. Und schließlich muss das Spiel dann auch noch Spaß machen und genug Leute faszinieren, damit es überhaupt "massiv" wird.

Stefan
Benutzeravatar
DeKugelschieber
User
Beiträge: 82
Registriert: Sonntag 28. Februar 2010, 12:23
Kontaktdaten:

WoW speichert die Daten auch erstmal in einer SQL Datenbank, aber die Koordinaten so weit ich weiß nur alle paar Minuten als Backup oder wenn man sich ausloggt.
MfG DeKugelschieber
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

@sma: Hätte ja sein können, dass ihr sowas schon mal gemacht hat. Das ich sowas programmieren wollte hat mich erst zum programmieren gebracht. Ich probier das dann mal so mit einer Mixtur von deinem Vorschlag und dem von Dauerbaustelle. Ich schreib dann mal rein was da raus kommt.
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich will hier die guten Tipps nicht in Frage stellen, speziell das "Experimentieren" ist sicherlich enorm wichtig.

Aber: Hast Du denn überhaupt schon ein fertiges Spiel erstellt, das spielbar ist und auch gespielt wird? Ich denke schon, dass man sich zu Beginn nicht zu sehr auf das "massiv" versteifen sollte, solange man generell so eine komplexe Struktur nicht erfolgreich umgesetzt hat.

Hat man eine wirklich stabil laufende Applikation geschrieben, so wird man auch am ehesten sehen und merken, bei welchen Parametern die Performance Probleme verursacht.
Antworten