mmofacts.com

Berechnungen

gepostet vor 19 Jahre, 6 Monate von Balduran

Hallöchen,
ich programmier zurzeit mein eigenes Browsergame
Nun ist es endlich möglich Städte einzunehmen und das zieht nu derbe am Speed wenn man ne seite aufruft weil nu jeder 100 städte hat oda so.

Ich habe das so programmiert das bei jedem Seitenaufruf alles berechnet wird für alle spieler:
Gebäudefertigstellung checken,
Forschungen überprüfen,
Ressourcen berechnen,
Städte einnehmen,
nachrichten mit boten versenden....


kennt ihr ne alternativ technik anstatt das jeder Spieler alles durchrechnet??

hoffe auf schnelle antwort bevor nichtsmehr spielbar is

gepostet vor 19 Jahre, 6 Monate von RedMax
All diese Berechnungen sollten in einem Script im Hintergrund abgearbeitet werden. Einfach ne Endlosschleise mit sleep(1) reicht da völlig.
gepostet vor 19 Jahre, 6 Monate von Balduran
wer ruft den script auf?



hab mir gedacht ich pack alle berechnungen in einen script und machs mit cronjobs...
kennt einer von euch nen cronjob anbieter mit 1min intervall??

mein domainanbieter gibt mir kene cronjobs
gepostet vor 19 Jahre, 6 Monate von RedMax
Ich bin jetzt davon ausgegangen, dass du einen rootserver hast
Nämlich wenn du schon Probleme mit der Last hast und dementsprechend viele Spieler kann man sich das schon leisten.

Ansonsten kann ich dir leider nicht helfen.
gepostet vor 19 Jahre, 6 Monate von Crafty-Catcher
Eh.....

sleep(1) keine gute Idee

also du solltest nicht bei jedem klick für alle Spieler alles berechnen sondern jeder klick eines users sollte nur das berechnen was wirklich gebraucht wird.

Beispiel User klickt aufs Forschungsmenü das einzige was da aktualisiert werden müssen sind
ress und die aktuelle forschung u.U. auch noch die Punkte.

Ally Punkte oder andere ausbauten müssen nicht berechnet werden, da die daten auch nicht ausgegeben werden.
gepostet vor 19 Jahre, 6 Monate von Kallisti
Dennoch wird bei shared server accounts die maximale cpu last limitiert sein und du wirst mit jeder Variante Probleme haben... ein normaler Webspaceaccount reicht einfach nicht für ein Browsergame.

Alternativ zu der "ich aktualisiere, wenn es irgendwer braucht" Version, gäbe es noch die Möglichkeit einen Daemon im Hintergrund laufen zu lassen, der alles abarbeitet, was zu erledigen ist. Hat auch den Vorteil, dass der Server in Peakzeiten entlastet wird und nicht alle Gebäude, Forschungen uswusw. fertig werden, wenn sich die meisten Spieler einloggen...

Benötigt aber natürlich eine Shell auf dem Server und ist in c/c++ wohl am performantesten...
gepostet vor 19 Jahre, 6 Monate von Crafty-Catcher
Original von Kallisti
Dennoch wird bei shared server accounts die maximale cpu last limitiert sein und du wirst mit jeder Variante Probleme haben... ein normaler Webspaceaccount reicht einfach nicht für ein Browsergame.


Das ist so als Aussage schlichtweg falsch. Weil nirgends ne Anzahl User steht. Wetten das da selbst ein komplexes Game mit 10 Usern läuft

Bei einem nicht zu komplexen Game (sowas wie GW oder Ogame) solte ein normaler Webspace bis ca. 750 Usern völlig ausreichend sein.
gepostet vor 19 Jahre, 6 Monate von Kampfhoernchen
Ohne Cronjobs wird es da ziemlich schwer, grad wenn du ein komplexes Kampfscript hast, bei dem die Berechnung meherere Sekunden dauert. Dann kann es nämlich passieren, dass der kampf mehrmals berechnet wird, weil einfach 2 klicks innhalb 1 Sekunde kommen.
gepostet vor 19 Jahre, 6 Monate von Kallisti
Naja Crafty... mir ist schon klar dass es möglich sein _kann_

Aber je nach Komplexität und gerade in seinem Fall, ist es das wohl nicht.

Er hat ja wahrscheinlich einen shared server account und teilt sich mit ~100 oder mehr anderen Usern einen Server. Entweder sind die Ressourcen jedes Users sowieso limitiert (und daher dauert es nun schon zu lang) oder er bekommt Probleme mit dem Hoster...

Ich war mal von einer durchschnittlichen Userzahl im 1000er Bereich ausgegangen.
gepostet vor 19 Jahre, 6 Monate von Gambler
Wegen dem 2 ma starten das ist eh so ein Problem. Bei ner hohen Belastung kann es öfters dazu kommen dass Befehle mehrfach ausgeführt werden und dann die Daten verfälschen. Muss man halt die Spalte locken. Allerdings is das mit MySQL net so dolle.
gepostet vor 19 Jahre, 6 Monate von Balduran
Original von Kampfhoernchen
Dann kann es nämlich passieren, dass der kampf mehrmals berechnet wird, weil einfach 2 klicks innhalb 1 Sekunde kommen.

öhm glaub das kann nit passieren

du sagst der armee das se zum ziel laufen soll.. inner db steht ankunftszeit..
der checkscript(der jede min aufgerufen wird) guckt nach armeen die angekommen sind, rechnet angriff aus und löscht den auftrag, somit wird in der nächsten minute kein angriff mehr berechnet..



----
zum game => ich hab 40 spieler und 522 besiedelte städte und mit cronjobs klappt des nu super

Auf diese Diskussion antworten