Seite 1 von 2

Einige ideen um die Serverlast der engine zu mindern

Verfasst: 14. Dez 2008, 17:59
von ph34r_0ph_l34der
Hallo,

ich bin seid kurzem Freewarspieler und habe auch vorher schon immer ma wieder zugeschaut( ein Kumpel von mir ist seid 2 Jahren aktiv)
Auf dem Wiki und so steht überall, das freewar aufgrund der engine ziemlich beschränkt ist, da diese scheinbar ziemlich CPU zieht und es deswegen auch bei eigentlich geringen Spielerzahlen ( 30 -200 ) schon lag gibt.

Ich hätte hier meinen Senf aus jetzt fast 7 Jahren codeerfahrung, wie man das ganze etwas schneller laufen lassen könnte ( geht direkt an sotrax):
Ich weiss natürlich nicht, wie freewar programmiert ist, daher werden einige von den sachen sicher schon gemacht worden sein:

1) PHP-Caching aktivieren:
Dies redutziert die compilezeit von PHP ohne änderungen am Code:
Sollte eigentlich schon an sein, wenn nicht, geht das einfach und die meisten cacher kosten nichts:
z.B. währen da:
http://www.php-accelerator.co.uk/
http://pecl.php.net/package/APC ( APC, nimmt die Wikipedia)
http://eaccelerator.net/ ( wie der TurkMMCache. hatte ich selber und war sehr zufrieden, mein jetziger serverop hat aber überall Xcache installiert)
http://xcache.lighttpd.net/


Diese können PHP selbst um einige hundert prozent schneller machen.
2) Persistene Datenbankverbindungen.
Sollten eigentlich auch schon da sein. Machen das ganze auch noch mal schneller

3) wichtig für browsergames: (HIER IST das wichtigste)
http://www.danga.com/memcached/

Das ist ein system mit dem ihr datenbankabfragen und auch andere daten "cachen" könnt.
Daten aus diesem cache zu holen und zu speichern ist um vieles schneller als eine Datenbank, da sowohl alle daten im arbeitsspeicher vorgehalten werden, als auch keine komplexen SQL-Features implementiert sein müssen) .
Zum einen könnt ihr im memcached, wie auch auf der seite empfohlen, häufige Datenbankabfragen zwischenspeichern (z.B. "Welche Items hat spieler xy").
Ein Weg währe z.B. die items, stats und ähnliches aller spieler, die online sind, im memcached abzulegen und alle paar minuten (z.B. wenn die serverlast gerade niedrig ist: cron oder ähnliches) die daten aller spieler in eine persistente( also MySQL) datenbank abzuspeichern. Dabei könnten dann auch die Daten aller inaktiven und ausgeloggten Spieler aus dem memcached entfernt werden, damit dieser klein und effizient bleibt. Wenn ein neuer spieler einloggt ist er noch nicht im memcache vorhanden und wird aus der Datenbank nachgeladen. Deswegen gibt es sehr viel weniger datenbankabfragen( < 1% normalerweise, da ja alles schon im speicher des memcacheds abgespeichtert ist) und somit weniger Festplatten/ prozessoraktivität -> Die engine läuft schneller und kann mehr anfragen / sekunde bearbeiten.

Zum anderen müssen ja nicht alle informationen permanent im memcached abgespeichert werden -> zum beispiel ob ein gewisser NPC gespawnt ist muss ja nicht zwingend in der Datenbank stehen. Solche dinge können auch einfach nur im memcached geschrieben werden-> nach einem kompletten serverausfall sind dann eben alle NPCs wieder mit vollen HP auf der startposition . Ähnlich verhält sich der Cache und sogar items die nur rumliegen....

4) generelles auslagern periodischer aufgaben in cronjobs.
Wie oben bereits angedeutet können mit dem Linux / UNIX (oder wenn ihr das habt auch Windows-portierbarem) Cron-System aufgaben periodisch durchgeführt werden , zum beispiel das respawnen von monstern. Anstelle in jeder clientanfrage zu prüfen, ob ein monster respawnt werden muss, ob sich ein monster bewegt oder ähnlcihes, könnte dieser PHP code auch einfach in einem anderen script abgelegt werden, dass das z.B. alle 30 sekunden oder noch häufiger von cron ausgeführt wird.
Somit "laggen" client nicht, wenn ihre anfrage eben auch mal die Monster-KI oder einige respawns erledigen muss.


5) Chat optional in Flash implementieren.
Der chat momentan ist durch ein häufig aktualisiertes javascript/HTML mit PHP implementiert -> das ist langsam und setzt dem server großer last aus. Fast alle clients haben heutzutage flash also könnte man bei allen, die Flash haben, ein einfaches Flash script schreiben, dass den Chat anbietet (Flash kann dinge wie chat sehr viel schneller implementieren als Javascript, z.B. durch flash-HTTP-data connections). Dies sieht dann genauso aus wie jetzt, nur hat der server weniger arbeit.
Alle clients die kein Flash-Plugin haben sehen weiterhin das gewohnte Interface und vllt eine Notiz, dass sie Freewar die arbeit leichter machenund weniger lag haben, wenn sie flash installieren( selbiges gilt für leute hinter Proxies, o ä. die so konfiguriert sind, dass Flash- daten nicht durchkönnen).


So ich hoffe diese paar dinge helfen euch irgendwie - Solltet ihr hilfe beim coden oder so brauchen bin ich immer wieder hier aktiv oder unter meinem namen auf ActionFreewar zu erreichen...

Edit: nehmt dies nicht als beleidigung- es ist eher ein gut gemeinter Rat, damit FW noch schneller laufen kann. Euer spiel ist echt cool, vor allem wenn man betrachtet, dass ihr sogut wie keine resourcen habt( im Vergleich zu z.B. ogame)

Re: Einige ideen um die Serverlast der engine zu mindern

Verfasst: 14. Dez 2008, 19:27
von Taruso
PN an Sotrax schicken?=)

Re: Einige ideen um die Serverlast der engine zu mindern

Verfasst: 14. Dez 2008, 19:36
von ph34r_0ph_l34der
rgr, wird gemacht

Re: Einige ideen um die Serverlast der engine zu mindern

Verfasst: 16. Dez 2008, 15:59
von hackerzzzz
Denkst du ernsthaft, Sotrax hat solche Dinge noch nicht in Betracht gezogen, oder nicht bereits realisiert?
Freewar ist kein Browser-Spiel dass auf einem kleine Mini-Server läuft,.. wird ja auch immer wieder bewiesen.
Sotrax steckt unmengen von Geldern in die gesamte Server-Landschaft und ich vermute mal einfach, dass er sich dabei auch auf ein Betreuungsteam oÄ verlassen kann.

Ich denke Anmerkungen sind ja schön und gut, jedoch bezweifle ich, dass ein User, der die internen Abläufe von Freewar nicht kennt, irgendetwas an Verbesserungsvorschlägen anbringen kann, als ein Admin.

Deine Anmerkungen sind sicher nicht schlecht, jedoch würde ich mir da nicht allzugrosse Hoffnungen machen, dass du damit Sotrax helfen kannst.

*duck*

Re: Einige ideen um die Serverlast der engine zu mindern

Verfasst: 16. Dez 2008, 16:29
von -MusK-
na, besser es wird gesagt und keiner brauchts, als andersrum...

Re: Einige ideen um die Serverlast der engine zu mindern

Verfasst: 16. Dez 2008, 16:58
von Schmiddi
Ich finds gut, dass er das wenigstens sagt. Wenn sich was findet, was die Server schneller macht, ists besser, als wenn niemand sowas erwähnt und man es nie merkt

Re: Einige ideen um die Serverlast der engine zu mindern

Verfasst: 16. Dez 2008, 17:38
von samira-w9
omg, computerfreaks oO

Re: Einige ideen um die Serverlast der engine zu mindern

Verfasst: 17. Dez 2008, 18:06
von AnubisII
Nur weil man so etwas interessant findet, ist man noch lange kein Freak, auch wenn ich nicht zu diesen Leuten gehöre(Ein Freund hat mir mal ein bisschen beigebracht, weils sau Spaß machen soll, fand ich aber nich wirklich und habs in kürzester Zeit wieder vergessen xD). Das Kennen von irgendwelchen Promis, Fußballspielern o. auch von klassischen Opern etc. ist wesentlich nutzloser, solche Leute werden aber nicht Freaks genannt, also ist dein Post nicht nur unnötig, sondern auch unlogisch.

€: Ich finds natürlich gut, dass jemand helfen will, auch wenns sinnlos gewesen sein mag.

Re: Einige ideen um die Serverlast der engine zu mindern

Verfasst: 17. Dez 2008, 18:45
von Gruenblatt-Stalker
Vielleicht falscher Ort, aber danke für deine Arbeit und deine Ideen.

Helfen kanns immer.

Don't feed Trolls.

Und hört auf, Ideen in den Boden stampfen zu wollen, verdammt nochmal, genau deswegen sind viele Menschen zurückgezogen und können ihre Ideen nicht mitteilen

hrmpf
Gruenblatt-Stalker aka Arastrus

Re: Einige ideen um die Serverlast der engine zu mindern

Verfasst: 19. Dez 2008, 06:47
von Maverick123
AnubisII hat geschrieben:€: Ich finds natürlich gut, dass jemand helfen will, auch wenns sinnlos gewesen sein mag.
Wer sagt, dass es sinnlos gewesen ist? Hört sich danach an, als wüsste der Threadersteller, wovon er redet, wenn Sotrax das liest, kann er bestimmt was davon verwenden ;)

Re: Einige ideen um die Serverlast der engine zu mindern

Verfasst: 19. Dez 2008, 10:24
von halbleiter
Bitte kein Flash - weg mit dem proprietären Kram...

Re: Einige ideen um die Serverlast der engine zu mindern

Verfasst: 19. Dez 2008, 10:56
von -MusK-
wie gesagt: der te hat sich eine platte gemacht und technisch versiert argumentiert. falls und wenn der scheffe davon was nutzen kann - umso besser. jedes gelaber aka klugsch... ist imho deplaziert. an sich gehört dieser thread als pn an sotrax und unkommentiert.
sry, aber so isses.
ps: ich vermisse noch das dagegen und den :roll: :roll: von rondo...

Re: Einige ideen um die Serverlast der engine zu mindern

Verfasst: 23. Dez 2008, 01:05
von ph34r_0ph_l34der
nuja es stimmt wirklich- es ist alles schon da oder der cheffel will es nicht benutzen (memcache). Sein game - seine Server -seine Entscheidung ^^·

Nur so ganz am Rande: Wenn ihr mich für unfähig haltet behaltet es doch für euch oder gebt bessere Vorschläge ab, bzw sagt, warum meine Vorschläge schlecht sind.

Re: Einige ideen um die Serverlast der engine zu mindern

Verfasst: 25. Dez 2008, 16:47
von damh
Punkt 1-4 laufen eh schon.

Punkt 5 stimmt schon. Der Chat ist bisschen umständlich programmiert, aber genauso müsste man theoretisch auch bei den anderen Frames dann rangehen und das System ausbauen. Aber mal ehrlich, wenn man den Server optimieren will, soll man ihn gleich neu programmieren und dann:
- ohne proprietäre Datenbank, da selbst bei bester Nutzung viel zu lahm (für Prototypen ist das eine nette Entwicklungshilfe, aber das wars dann auch schon :P).
- ohne PHP, da selbst mit Vorübersetzung, der Code viel zu lahm ist.
- ohne Apache, da ebenfalls zu doof und lahm (gerade wenn man in den Belastungsbereich kommt).

Aber im groben und ganzen muss ich Dir Recht geben, dass es noch viel besser funktionieren könnte.

Gruß damh

Re: Einige ideen um die Serverlast der engine zu mindern

Verfasst: 25. Dez 2008, 19:44
von gloop
Dann kann er glei alles in c++ schreiben und das dann Spiel vertreiben, dann kann man sich glei wow kaufen. Grad das alles so wies ist ist freewar. Solle nix dran geändert werden, vor allem flash finde ich nicht wirklich eine schnellere variante als das ajax (obwohl ajax ziemlich viel headerinfos hat) ...