Browsergame: PHP? Java? Oder doch C++?

Fragen zum Thema HTML, JavaScript, PHP
Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Browsergame: PHP? Java? Oder doch C++?

Beitrag von Glocke » Fr Mai 03, 2013 9:13 am

Hallo zusammen,

ich hatte im späten Frühjahr 2012 damit begonnen ein Browsergame (rundenbasiertes RPG) zu schreiben. Serverseitig verwendete ich Python, das bottle-Framework mit PasteServer und elixir als ORM für meine MySQL-Datenbank. Clientseitig kam zu großen teilen jQuery zum Einsatz. Das ganze hatte ich privat gehostet und im November 2012 eingestellt (Grund: zunehmende Inaktivität der Tester). Wen das interessiert, findet auf der zugehörigen Facebook-Seite Screenshots usw. Das ganze war programmiertechnisch eine "Einzelkämpfer"-Aktion, d.h. ich habe es komplett alleine geschrieben (ca. 700 kb Quellcode, d.h. Templates und Python-Code, ausgenommen verwendete Libs wie jQuery, bottle und paste)

Dabei hatte ich ein eigenständiges Skript für die Kampf-Berechnung (ebenfalls in Python). Über kurz oder lang bin ich (meiner Meinung nach) an die Grenzen der Implementierung gelangt:
  • Verzögerungen beim Laden der Seite, wenn "viele" (>10) Spieler gleichzeitig online waren. An der Internet-Verbindung sollte es afaik nicht gelegen haben.
  • Geschwindigkeitsprobleme bei der Kampfberechnung
Derzeit überlege ich irgendwann wieder ein kleines Browsergame in Angriff zu nehmen. Aktuell bin ich (imho sehr) fit in C++. Daher würde ich zentrale Skripte (wie Kampfberechnung) in ein nativ kompiliertes Programm auslagern. Das sollte die Geschwindigkeitsprobleme bei der Kampfberechnung (vorausgesetzt ich programmiere nicht schlampig :) ) im Vergleich zu einem reinen Python-Skript afaik verbessern.

Nun frage ich mich: welche Sprache sollte ich für den Webserver verwenden? Ich kenne leider nicht den Grund für die Verzögerungen beim Laden der Seite. Daher frage ich mich, ob ich vielleicht auf "etwas bewährtes" zurückgreifen sollte - und auf was :D Prinzipiell fallen mir da PHP und Java ein; nur weiß ich nicht, ob ich damit besser fahre.

Ein anderer Punkt: Imho gehört die Kampfberechnung zu einem sehr zentralen und weitgreifenden Teil eines Browsergames (wenn man ein "kämpfendes" Browsergame beabsichtigt). Da ich dieses Skript eh in C++ implementieren will: Wäre es da vielleicht sinnvoll, wenn ich mit ein HTTP(S)-Framework für C++ suche und meinen kompletten serverseitigen Code in C++ schreibe?

Ich hoffe ihr versteht mein Problem ein bisschen :D

LG Glocke :)

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Browsergame: PHP? Java? Oder doch C++?

Beitrag von cloidnerux » Fr Mai 03, 2013 9:50 am

Du kannst ja mal Xin fragen, der hat ja für das neue proggen.org CMS ein eigenen Webserver in C++ implementiert.
Das kannst du auch machen, sodass du komplett unabhängig von allem anderen bist.
Einfach ein Programm, dass alle Kommunikation und Berechnungen regelt, dann sollte das auch mit der Geschwindigkeit klappen.

Der Unterschied zwischen Java und C++ wirst du in deinen Maßstäben wrsl kaum merken, hier ist wohl die Sprache am besten, die du am besten beherrschst.
In wie fern PHP nützlich für dich ist, kann ich nicht sagen. Es wird wrsl auch reichen, wird aber mit zunehmender Größe sehr kompliziert werden.

Generell frage ich mich gerade, wie kompliziert denn bitte so eine Kampfberechnug sein kann? Was musst du denn alles Berechnen?
Redundanz macht wiederholen unnötig.
quod erat expectandum

Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: Browsergame: PHP? Java? Oder doch C++?

Beitrag von Glocke » Fr Mai 03, 2013 10:02 am

cloidnerux hat geschrieben:Du kannst ja mal Xin fragen, der hat ja für das neue proggen.org CMS ein eigenen Webserver in C++ implementiert.
Ah, danke für den Hinweis :)
cloidnerux hat geschrieben:Generell frage ich mich gerade, wie kompliziert denn bitte so eine Kampfberechnug sein kann? Was musst du denn alles Berechnen?
Naja im Falle meines Browsergame-RPGs waren da nicht nur die Aktionen der verschiendenen am Kampf teilnehmenden Spieler, sondern auch KI-Züge enthalten. Irgendwie zog sich das :D
Im Falle von OGame kann ich nur auf das OWiki verweisen, dort ist ein (mutmaßlicher) Kampfalgorithmus angegeben.

Ich vermute aber, dass bei meinem Browsergame-RPG der Overhead des ORMs elixir noch kräftig mitgemischt hat :D Generell war das alles nicht so optimal ^^

LG Glocke

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Browsergame: PHP? Java? Oder doch C++?

Beitrag von nufan » Fr Mai 03, 2013 10:39 am

cloidnerux hat geschrieben:Generell frage ich mich gerade, wie kompliziert denn bitte so eine Kampfberechnug sein kann?
Ähm... ja...
http://bulbapedia.bulbagarden.net/wiki/Catch_rate
Und das ist nur der Fang-Mechanismus, also ein kleiner Teil des Kampfsystems ^^

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Browsergame: PHP? Java? Oder doch C++?

Beitrag von Xin » Fr Mai 03, 2013 11:09 am

Glocke hat geschrieben:Screenshots usw.
Ich habe jetzt nur die Kathedrale gesehen, aber könntest Du die Grafiker nicht mal hier einladen? ;-D
Glocke hat geschrieben:Das ganze war programmiertechnisch eine "Einzelkämpfer"-Aktion
Wenn du Einzelkämpferaktionen machst, musst Du einen langen Atem haben und ein Projekt, das das verkraftet. Spiele veralten schon bei der Programmierung. Also musst Du entweder auf vorhandene Frameworks aufsetzen oder eine leicht zu implementierende Idee haben.
Du siehst, Dir laufen die Betatester weg, weil das Spiel nicht mehr interessant genug ist und Du alleine nicht schnell genug entwickeln kannst.
Jeder programmiert Spiele, alle wollen Spiele programmieren, viele bilden Teams, wenige Teams können produktiv zusammenarbeiten, aber selbst die wenigen drängen Dich ins Abseits, wenn Du alleine dagegen konkurrieren willst. Es gibt einfach zu viel Konkurrenz, um alleine zu bestehen.

Beim Compilerbau ist das anders. Ich kann mir 10 Jahre Zeit lassen und wenn's sein muss auch nochmal 10 Jahre...
Glocke hat geschrieben:[*] Verzögerungen beim Laden der Seite, wenn "viele" (>10) Spieler gleichzeitig online waren. An der Internet-Verbindung sollte es afaik nicht gelegen haben.
Einen eigenen Server hattest Du aber nicht, oder?

Als proggen.org noch auf VServern lief, hatten wir regelmäßig Probleme, für die ich laut Provider selbst verantwortlich bin.
Auf dem aktuellen Server laufen wir alleine. Jetzt bin ich alleine verantwortlich.

Code: Alles auswählen

xin@prgn:~$ uptime
 12:00:16 up 358 days, 16:36,  1 user,  load average: 0.41, 0.19, 0.15
Seit 358 Tagen habe ich sehr wenig Probleme mit dem Server. Wie Du auf status.proggen.org siehst, gibt es nach dem Umzug eigentlich nichts relevantes mehr.
Glocke hat geschrieben:Derzeit überlege ich irgendwann wieder ein kleines Browsergame in Angriff zu nehmen. Aktuell bin ich (imho sehr) fit in C++. Daher würde ich zentrale Skripte (wie Kampfberechnung) in ein nativ kompiliertes Programm auslagern. Das sollte die Geschwindigkeitsprobleme bei der Kampfberechnung (vorausgesetzt ich programmiere nicht schlampig :) ) im Vergleich zu einem reinen Python-Skript afaik verbessern.
Wird es.
Glocke hat geschrieben:Nun frage ich mich: welche Sprache sollte ich für den Webserver verwenden? Ich kenne leider nicht den Grund für die Verzögerungen beim Laden der Seite. Daher frage ich mich, ob ich vielleicht auf "etwas bewährtes" zurückgreifen sollte - und auf was :D Prinzipiell fallen mir da PHP und Java ein; nur weiß ich nicht, ob ich damit besser fahre.
Von PHP rate ich ab, sobald Du mehr als 5 Funktionen rufen möchtest.
Glocke hat geschrieben:Ein anderer Punkt: Imho gehört die Kampfberechnung zu einem sehr zentralen und weitgreifenden Teil eines Browsergames (wenn man ein "kämpfendes" Browsergame beabsichtigt). Da ich dieses Skript eh in C++ implementieren will: Wäre es da vielleicht sinnvoll, wenn ich mit ein HTTP(S)-Framework für C++ suche und meinen kompletten serverseitigen Code in C++ schreibe?
HTTP ist ein sehr einfaches Protokoll.
Das heißt aber nicht, dass man es von heute auf morgen implementiert bekommt, höchstens wenn Du ein gutes Framework im Rücken hast und weißt, was Du da tust.

Und Du übernimmst damit auch die Verantwortung für die Verbindungen. Dafür sind sie extrem schnell.

Wenn Du ein Framework dafür suchst - mir ist keins bekannt. Deswegen habe ich begonnen selbst einen HTTP-Server zu schreiben, der auch bereits läuft.
Der Service ist allerdings eher auf mein Problem angepasst: Wiki und Forum. Aktuell programmiere ich in C++ etwa so, wie andere in PHP - nur halt typsicher und der Kram wird kompiliert.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: Browsergame: PHP? Java? Oder doch C++?

Beitrag von Glocke » Fr Mai 03, 2013 2:15 pm

Xin hat geschrieben:Ich habe jetzt nur die Kathedrale gesehen, aber könntest Du die Grafiker nicht mal hier einladen? ;-D
Das war nen Background-Wallpaper auf Grundlage einer freien Blender-Vorlage ^^
Xin hat geschrieben:Wenn du Einzelkämpferaktionen machst, musst Du einen langen Atem haben und ein Projekt, das das verkraftet. Spiele veralten schon bei der Programmierung. Also musst Du entweder auf vorhandene Frameworks aufsetzen oder eine leicht zu implementierende Idee haben.
Du siehst, Dir laufen die Betatester weg, weil das Spiel nicht mehr interessant genug ist und Du alleine nicht schnell genug entwickeln kannst.
Jeder programmiert Spiele, alle wollen Spiele programmieren, viele bilden Teams, wenige Teams können produktiv zusammenarbeiten, aber selbst die wenigen drängen Dich ins Abseits, wenn Du alleine dagegen konkurrieren willst. Es gibt einfach zu viel Konkurrenz, um alleine zu bestehen.
Das ist eines der Probleme. Ich würde bei so etwas Teamkollegen (für's Programmieren) bevorzugen, die ich bereits kenne (keine x-belibigen 15-jährigen aus irgendwelchen Pseudo-Foren :D ). Anfangs wollte ich die Sache mit einem Kommilitonen zusammen auf die Beine stellen - er ist aber am Anfang noch "abgesprungen", weil er Zeitprobleme hatte und mir das Problem nicht aufhalsen wollte.

Afaik sind die Tester aber auch zunehmend inaktiv geworden, weil die Spielinhalte noch recht "schnell durchgespielt" waren (4 oder 5 mögliche Schauplätze). Zugegebener Maßen bin ich da selber schuld :D
Xin hat geschrieben:Einen eigenen Server hattest Du aber nicht, oder?
Naja privat gehostet :D (bei einem Bekannten).
Xin hat geschrieben:Von PHP rate ich ab, sobald Du mehr als 5 Funktionen rufen möchtest.
Ich mag PHP auch nicht wirklich :D Allein die Tatsache, dass Variablen weder initialisiert noch deklariert werden müssen .. bei Tippfehler-Bugs debuggt man sich zu Tode -.-
Xin hat geschrieben:HTTP ist ein sehr einfaches Protokoll.
Das heißt aber nicht, dass man es von heute auf morgen implementiert bekommt, höchstens wenn Du ein gutes Framework im Rücken hast und weißt, was Du da tust.
Xin hat geschrieben:Wenn Du ein Framework dafür suchst - mir ist keins bekannt. Deswegen habe ich begonnen selbst einen HTTP-Server zu schreiben, der auch bereits läuft.
Schade xD
Xin hat geschrieben:Der Service ist allerdings eher auf mein Problem angepasst: Wiki und Forum. Aktuell programmiere ich in C++ etwa so, wie andere in PHP - nur halt typsicher und der Kram wird kompiliert.
Nice :)

LG Glocke

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Browsergame: PHP? Java? Oder doch C++?

Beitrag von Xin » Fr Mai 03, 2013 2:42 pm

Glocke hat geschrieben:Das ist eines der Probleme. Ich würde bei so etwas Teamkollegen (für's Programmieren) bevorzugen, die ich bereits kenne (keine x-belibigen 15-jährigen aus irgendwelchen Pseudo-Foren :D ). Anfangs wollte ich die Sache mit einem Kommilitonen zusammen auf die Beine stellen - er ist aber am Anfang noch "abgesprungen", weil er Zeitprobleme hatte und mir das Problem nicht aufhalsen wollte.
So habe ich mit meinem Compiler auch begonnen.
Die guten Entwickler haben Besseres zu tun, die ... weniger guten will ich mir nicht aufhalsen. Wenn Du Dir solche Leute nicht aufhalst (ohne 't' ^^), hast Du eher eine Chance.
Glocke hat geschrieben:
Xin hat geschrieben:Einen eigenen Server hattest Du aber nicht, oder?
Naja privat gehostet :D (bei einem Bekannten).
Hatte der einen Server? Oder auch nur einen VServer?
Glocke hat geschrieben:
Xin hat geschrieben:HTTP ist ein sehr einfaches Protokoll.
Das heißt aber nicht, dass man es von heute auf morgen implementiert bekommt, höchstens wenn Du ein gutes Framework im Rücken hast und weißt, was Du da tust.
Xin hat geschrieben:Wenn Du ein Framework dafür suchst - mir ist keins bekannt. Deswegen habe ich begonnen selbst einen HTTP-Server zu schreiben, der auch bereits läuft.
Schade xD
Wieso schade - ich finde das ganz positiv, dass mein Server läuft. ^^

Auch hier könnte man gucken, ob man was zusammen bauen kann.

Man könnte gucken, ob man Dein Spiel als Plugin verbraten könnte, dann habe ich einen Grund mich ausführlicher um Plugins zu kümmern. ;-)
Ich gebe Dir eine Struktur, die die aufgerufene Seite beschreibt, die GET, POST und HTTP-Protokollinformationen enthält, sowie die Cookies und Du gibst mir Deine Antwort, was zurück geschickt werden muss.

Damit wirst Du quasi zum Alphatester.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: Browsergame: PHP? Java? Oder doch C++?

Beitrag von Glocke » Fr Mai 03, 2013 2:46 pm

Xin hat geschrieben:Hatte der einen Server? Oder auch nur einen VServer?
VServer (VirtualBox mit WinXP - ich war froh einen kostenlosen Server zu haben :D )
Xin hat geschrieben:Wieso schade - ich finde das ganz positiv, dass mein Server läuft. ^^
Ich meinte eher schade, dass du kein entsprechendes Framework kennst :P
Xin hat geschrieben:Auch hier könnte man gucken, ob man was zusammen bauen kann.

Man könnte gucken, ob man Dein Spiel als Plugin verbraten könnte, dann habe ich einen Grund mich ausführlicher um Plugins zu kümmern. ;-)
Ich gebe Dir eine Struktur, die die aufgerufene Seite beschreibt, die GET, POST und HTTP-Protokollinformationen enthält, sowie die Cookies und Du gibst mir Deine Antwort, was zurück geschickt werden muss.

Damit wirst Du quasi zum Alphatester.
Klingt interessant, sprich weiter :D

Benutzeravatar
darksider3
Beiträge: 347
Registriert: Fr Sep 14, 2012 6:26 pm
Wohnort: /dev/sda1
Kontaktdaten:

Re: Browsergame: PHP? Java? Oder doch C++?

Beitrag von darksider3 » So Mai 05, 2013 2:57 pm

Hey,
ich geb da jetzt mal meinen Senf(Mit Ketchup) zu.
Naja, meine Meinung zu PHP ist allgemein bekann(Ich liebe es!). Aber jeder, der ein Browsergame schreiben will sollte PHP nur nutzen, um die Spiel Dateien aufzurufen, wenn das nötig ist. Ich würde die Skripte entweder in Python schreiben und vorkompilieren, dies bringt wieder einen Tick weniger pro aufruf, oder in C++ und über (Also beides) PHP aufrufen. Dann bewertest du nurnoch die Rückgabewerte der Programme und übergibst diese diese wieder mit PHP an eines dieser Kommandozeilen Programme.
Viele würden auch Java dazu nutzen, ein Browsergame zu schreiben. Letztendlich ist Java fast wie dafür geschaffen.(Aber nicht wirklich schön anzusehen)

Ich meinte mal irgendwo gelesen zu haben, dass ein Webserver zu schreiben gar nicht so schwer ist. Die HTTP Befehle zu implementieren ist auch leicht, wie Xin schon andeutete. Das ist weniger das Problem, als die Masse der möglichen Befehle. Wenn ich das jetzt schreiben müsste, würde ich auch eine Cache Funktion hinzufügen, also das der eine Spieler lädt, der Server das zwischenspeichert und eine bestimmte Zeit behält, bis ein User das selbe Aufruft. So lädt der Server nur noch die schon existierenden Ausgaben und nichts muss mehr berechnet werden. Das wäre z.B auch bei einem Kampfsystem von Vorteil, aber Speicherlastig. Spieler 1 greift Spieler 2 an. Spieler 1 hat 50 Soldaten(1Soldat=50 Schadenspunkte,20 Lebenspunke), Spieler 2 hat 72. Jetzt berechnet der Server dies nur einmal(!) und speichert das Ergebnis, falls jemand wieder das Selbe auswählt. Ab einer bestimmten Zeit sind zwangsläufig ALLE Ergebnisse schon da, müssen also nicht mehr Berechnet werden.
--Spielerei^^--
Also wenn ich C++ zur genüge könnte, würde ich es damit Probieren ;)
effizienz ist, wenn ich ein loch bohre und hinterher mein nachbar auch ein bild aufhängen kann... ^^
Meine Homepage und der Microblog von mir :)
Live Life dont let Life Live You!
Am meisten Aktiv in Webentwicklung und PHP im Wiki

sebix
Beiträge: 82
Registriert: Mo Nov 19, 2012 8:27 pm

Re: Browsergame: PHP? Java? Oder doch C++?

Beitrag von sebix » Mo Mai 06, 2013 9:07 pm

darksider3 hat geschrieben:Das wäre z.B auch bei einem Kampfsystem von Vorteil, aber Speicherlastig. Spieler 1 greift Spieler 2 an. Spieler 1 hat 50 Soldaten(1Soldat=50 Schadenspunkte,20 Lebenspunke), Spieler 2 hat 72. Jetzt berechnet der Server dies nur einmal(!) und speichert das Ergebnis, falls jemand wieder das Selbe auswählt. Ab einer bestimmten Zeit sind zwangsläufig ALLE Ergebnisse schon da, müssen also nicht mehr Berechnet werden.
Wenn du einen guten Algo hast, verwendet er bei der Berechnung von 51 vs. 72 das Ergebnis von 50 vs. 72 ;) Nennt sich dann Dynamische Programmierung. Wenn du so ein Kampfsystem hast, brauchst du dir keine Sorgen um Performace machen :)

Zur Sprache: Wer Java kann, wird es wohl auch für Webanwendungen nutzen, klarer Fall. Ich gehöre zu denen, die es absolut verabscheuen, also keine Möglichkeit für mich.
Da ich PHP am besten kann, ist es momentan die erste Wahl für mich, besonders wenn PHP gefordert ist (Auftraggeber, um Verbreitung zu erreichen etc.). Ich selbst würde gerne mit Python auch in Richtung Webentwicklung gehen, hier bin ich aber nicht sicher, ob das wirklich lohnend mehr Performaz bringt, als PHP. Ruby ist mir zu magic, Perl zu oldstyle, JS kann ich zu wenig, Scala zu anders und ASP *igitt*.

Mit Python könnte man sich auch recht einfach den Server auch dazu bauen, kompilieren, dann sollte das schon recht fix sein.

Antworten