Java-Server oder PHP-Script?

daddz

Mitglied
Hallo,

ich wollte mal wissen was perfomanter ist!
Das ganze soll dann auf einem Web-Server laufen und anfragen von einem BrowserGame verarbeiten bzw. nach einer bestimmten Zeit alle eingegangenen Befehle abarbeitet.
Wäre es besser wenn ich einen Java-Server programmiere, der dann auf dem Server im Hintergrund läuft und z.B. alle 5 Minuten die erhaltenen Befehle ausführt ( z.b. Kämpfe, Ressourcenupdate, etc...).
Alternativ könnten auch alle Befehle in eine MySQL-DB geschrieben werden und werden dann abgearbeitet.
Die andere Möglichkeite wäre ein CronJob, der ein PHP-Script aufruft, das dann auch in der DB alle Befehle durchführt.
Oder man könnte auch mit timestamps arbeiten die bei jedem Seiten-Refresh überprüft werden und dann gegebenenfalls Ressourcen erhöhen etc...

Welche der 4 Möglichkeiten wär am schlauesten/perfomantesten bei ziemlich vielen Spielern ( mögliches Problem bei Möglichkeit 4 )

Danke schonmal!

greetz
daddz
 
Also das kommt ganz drauf an wie das Game aussehen soll, so etwas DroidWars mäßiges kannst du wohl ruhig in Verbindung mit PHP machen, aber etwas "aktives" z.B. ein Billardgame solltest du mit Java machen oder mit Flash etc.
 
Sinac hat gesagt.:
Also das kommt ganz drauf an wie das Game aussehen soll, so etwas DroidWars mäßiges kannst du wohl ruhig in Verbindung mit PHP machen, aber etwas "aktives" z.B. ein Billardgame solltest du mit Java machen oder mit Flash etc.
Nein, es geht nicht um das Frontend, sondern um das Backend.
Und meine herzerfrischende Antwort ist, dass du es in der Sprache machen solltest, die du (besser) beherrscht. Java sollte schneller sein, ist aber auch, von den Kosten für einen Server etc. pp., teurer und um »etwas« komplizierter.
 
Hmm, also rein Kosten-Technisch ist das nicht so das Problem. Es wird auf eigenen Servern laufen. Ich hab mir halt gedacht, das es so läuft wie z.B. der Apache-Server -> als eigenständiges Programm.
Vom können her...ist PHP eigentlich die bessere Wahl, aber da ich auch momentan am Java lernen bin und auch schon was in Richtung Server-/Client-Software gemacht hab dachte ich mir, dass das eine gute Möglichkeit wäre meine Kenntnisse noch zu erweitern.

greetz
daddz
 
hallo

ich arbeite momentan an einem generischen und voll konfigurierbaren browsergame-server in Java, der dynamische daten in eine datenbank speichert. in der konfiguration werden die game-objekte, die units und items zuerst mittels XML modeliert, dynamische attribute werden für jeden user in die DB geschrieben... und so weiter. tasks werden in der DB abgespeichert und ein eingens dafür zuständiger thread checkt diese in einem bestimmten intervall und führt die task aus, wenn die wait-time abgelaufen ist.

das problem stellte sich mir auch; soll ich items, die konstant wachsen, wie resourcen (holz, lehm, getreide u.s.w) via eines eigenen threads, eines immer laufenden tasks steuern oder gäbe es wohl eine performantere methode?

dann kam ich auf die idee, dem attribute noch den intervall wert zuzuschreiben und den timestamp des letzten updates. so kann der momentane wert der resource erst bei einem konkreten zugriff auf den wert also einem user request, berechnet und upgedated werden.

das sieht dann in der DB etwa so aus:

TABLE: COUNTED_ATTRIBUTES
COLUMN: id (integer) (primary key)
COLUMN: object (game object reference) (foreign key)
COLUMN: name (VARCHAR)
COLUMN: value (integer)
COLUMN: interval (integer)
COLUMN: lastUpdate (timestamp)

nun kann bei einem zugriff mit interval, lastUpdate und value (wo immer der wert zum zeitpunkt last update steht) der aktuelle wert berechnet werden und upgedated werden.

konkretes beispiel:

value = 3; interval = 1 (/h); lastUpdate=1 (vor einer stunde)

nun erfolgt ein request auf die aktuelle value. erst muss die aktuelle value berechnet, dann upgadated werden, dann kann der request ausgeführt werden --->

requestTime = 2 --->

set value = value + interval * ( requestTime - lastUpdate );
set lastUpdate = requestTime;
return value;

der vorteil ist, dass es keine speziellen task braucht, um die wert aktuell zu halten, diese werden einfach immer bei bedarf berechnet, und nur dann. dies ist viel performanter.

zu beachten ist nocht, dass bei interval oder value änderungen immer zuerst ein update der value gemacht wird, bevor der neue intervall wert gesetzt wird oder bevor die value verändert wird.

hoffe dies hilft dir... grüsse

Sindbad
 
Zuletzt bearbeitet:
Leider ist das Projekt gestorben, aber der Server wurde weiterverwendet (zumindest das Konzept) für ein anderes Projekt(siehe Signatur).

Zum Glück hab ich ihn damals schon gut durchdacht und dynamisch aufgebaut, sodass man ihn ganz einfach umfunktionieren kann. ;-]

greetz
daddz
 
Zurück