serienjunky Geschrieben 25. Juni 2008 Geschrieben 25. Juni 2008 Hallo zusammen, ich stehe gerade vor einem Projektbeginn und habe noch einige Fragen. Das Endprodukt sollte ein online Browsersportgame in Flash werden. Mir ist schon klar, dass ich das nicht in wenigen Wochen erstellen kann. Ich denke da eher an Freizeitsbeschäftigung über Jahren hinweg. )) Bevor ich aber beginnen kann, muss ich mich für die Programmiersprachen entscheiden. Und genau hier stehe ich vor grossen Schwierigkeiten, da ich eben ein sehr beschränktes Fachwissen besitze. Einzig Flash (Actionscript), PHP (MySQL), HTML und Javascript beherrsche ich teilweise. Welche Sprache eignet sich hier für am besten? (Performance und so...) Wissen sollte man, dass die Spiele im Browsergame all 30 Sekunden neu berechnet werden und auf Eingriffe der User reagieren sollten. Ausserdem sollten die Spiele auch wenn kein User online ist berechnet werden. Anfangs dachte ich, dass ich das ganze nur mit PHP, MySQL und Flash (Actionscript) mache. Aber eben, PHP funktioniert nur wenn auch min. ein User online ist.(Zwar mit Cronjop möglich) Und da viele Berechnungen in einer Zeitperiode immer wieder durchgeführt werden und viel auf die DB zugegriffen wird, dacht ich mir, dass ich ein Programm schreibe, welches auf dem Server ist und diese Berechnungen durchführt. Ist das der Richtige Weg? Oder sollte ich doch alles mit PHP machen? Natürlich freu ich mich auch auf andere Tipps bezüglich Browsergame. Mit freundlichen Grüssen sereinjunky Zitieren
flashpixx Geschrieben 25. Juni 2008 Geschrieben 25. Juni 2008 Hallo, Du kannst einen Dienst in einer beliebigen Sprache schreiben, der dann auf dem Server läuft und die entsprechenden Dinge auf dem Server durchführt. Du solltest vor allem, das Design gut durchdenken, damit Du bei steigender Userzahl keine Probleme mit den Zugriffen hast. Es bietet sich auch an, dass man nach Datenvolumen nicht mySQL einsetzt sondern andere DBMS Lösungen z.B. Postgres. Postgres stellt z.B. Python innerhalb von Stored Procedures zur Verfügung. HTH Phil Zitieren
serienjunky Geschrieben 25. Juni 2008 Autor Geschrieben 25. Juni 2008 Juhu endlich bekomme ich in einem Forum eine Antwort, vielen Dank :e@sy Du kannst einen Dienst in einer beliebigen Sprache schreiben, der dann auf dem Server läuft und die entsprechenden Dinge auf dem Server durchführt. beliebig? Kannst du mir eine nennen? Habe ich das richtig verstanden, dass sich PHP nicht für diese Berechnungen bzw. Verarbeitungen der Daten eignend. Bräuchte ich da PHP noch? Würde das so aussehen? Flash <-> Datenbank <-> beliebigen Anwendungssprache Du solltest vor allem, das Design gut durchdenken, damit Du bei steigender Userzahl keine Probleme mit den Zugriffen hast. Kannst du mir diesbezüglich sagen, auf was ich da achten muss? Das Design wird mit Flash gemacht. Es bietet sich auch an, dass man nach Datenvolumen nicht mySQL einsetzt sondern andere DBMS Lösungen z.B. Postgres. Für mein Browsergame wäre also mySQL nicht optimal? Postgres stellt z.B. Python innerhalb von Stored Procedures zur Verfügung. Wenn ich mich nicht irre (Was ich leider sehr oft tue ), dann kann bei den Stored Procedures kein Benutzer zugreifen oder? Und genau diese ist ja bei meinem Browesergame notwendig. Zitieren
Carnie Geschrieben 25. Juni 2008 Geschrieben 25. Juni 2008 Also Cronjob hast du das "Problem" das er maximal jede Minute laufen kann. Müsstest also um 30 Sekunden hinzubekommen den Job verschachteln. Also in meinen Augen kannst du "alles" mit PHP machen, auch wenn hier sicherlich jemand elegantere Lösungen parat hat. Setz die maximale Laufzeit eines PHP SKriptes auf unendlich (ACHTUNG !!!) und pack die jeweiligen Aktionen in eine endlose Schleife die du mit einem sleep 30 versiehst. Zitieren
serienjunky Geschrieben 25. Juni 2008 Autor Geschrieben 25. Juni 2008 Diese Gedanken hatte ich auch schon. Besonders, weil ich PHP schon recht beherrsche. Aber du sagst es ja selber, die PHP Lösung ist nicht wirklich elegant. Leider weiss ich nicht, wie es mit der Performance aussieht. Zitieren
geloescht_JesterDay Geschrieben 25. Juni 2008 Geschrieben 25. Juni 2008 Es bietet sich auch an, dass man nach Datenvolumen nicht mySQL einsetzt sondern... Das ist doch Blödsinn. Wieso sollte mysql kein Datenvolumen verarbeiten können, wie es bei so nem kleinen Browserspielchen zustande kommt? siehe z.B. Database test: Sun UltraSparc T1 vs. AMD Opteron (9/10) | Tweakers.net Ja, keiner sagt dass mysql schneller ist als pgsql, aber unbrauchbar ist mysql auch nicht. Außerdem wird er keinen Provider finden, der ihm pgsql zum webspace anbietet Und bei seinen Kenntnissen ist ein root-server auch nicht das, was du ihm empfehlen willst, oder? Ansonsten wirst du mit php bestimmt keine endlosschleife programmieren wollen. Das was im Browser abläuft ist komplett getrennt von dem was php macht. Das was du im Browser siehst ist allein die ausgabe des PHP-Interpreters. Wenn du da eine endlosschleife hast, dann ginge das theoretisch, nur reagieren auf das was der User tut... über ein zwotes skript und db einträge und abfragen könnte man... aber da denk ich lieber nich mal weiter drüber nach. Ein Browsergame funktioniert ganz einfach, indem der Server auf Aktionen des Users wartet und diese verarbeitet. Wenn du eine Interaktion im Browser brauchst musst du Javascript oder eben Flash o.ä. nehmen. Wenn du das schneller und flüssiger haben willst, bietet sich auch AJAX an. Beliebig für die Programmiersprache heißt ganz einfach, dass die egal ist. sie muss nur auf dem (Web)Server laufen. Dann kannst du PHP, Perl, C, C#, ASP(.net), Java, Ruby, Delphi oder was auch immer nehmen. Zitieren
flashpixx Geschrieben 25. Juni 2008 Geschrieben 25. Juni 2008 beliebig? Kannst du mir eine nennen? C++, Prolog, .NET, C#, Java, ....... es kommt auf Deine Algorithmik, die Plattform und eben Deine Kenntnisse an Habe ich das richtig verstanden, dass sich PHP nicht für diese Berechnungen bzw. Verarbeitungen der Daten eignend. Bräuchte ich da PHP noch? Nicht zwingend, eine Sache des persönlichen Geschmacks. Du kannst auch Perl nehmen oder eine andere Sprache Würde das so aussehen? Flash <-> Datenbank <-> beliebigen Anwendungssprache Mir ist nicht bekannt das Flash direkt einen Datenbank Zugriff unterstützt (kann aber sein, dass ich hier nicht mehr up-to-date bin). Warum nicht Flash <-> Webservice & Anwendung <-> Datenbank <-> Anwendung Schaue Dir mal den Bereich "verteilte Anwendungen" und die dazugehörigen Modelle an. Ich kenne nicht Deine Systemanforderungen, aber da Du als Bowsergame sicher mehrere simultane Zugriffe, die auch sehr zeitnah sein müssen, sowohl auf die Datenbank wie auf die Anwendung hast bietet sich ein verteilte Anwendung an. Kannst du mir diesbezüglich sagen, auf was ich da achten muss? Das Design wird mit Flash gemacht. Das "Design" heißt hier nicht die optische Ausgabe, sondern das Design der entsprechenden Komponenten, d.h. das Deine Anwendung skalierbar sein muss, denn wenn du vielleicht mit 10 Benutzer anfängst und innerhalb von Monaten Du die 10.000 User hast, muss das Konzept hinreichend gut sein, damit Du nkeine Performanceeinbrüche hast. Für mein Browsergame wäre also mySQL nicht optimal? siehe Deine Anforderungen. mySQL ist sicherlich nicht immer die erste Wahl. Es kommt eben auf die Anforderungen an, die ich nicht kenne. Es gibt DBMS Systeme, die eben andere Funktionalitäten bieten, mit denen sich gewisse Konzepte besser umsetzen lassen. Setzt Du z.B. bei mySQL nicht auf InnoDB hast Du keine Transaktionssicherungen, die z.B. Postgres schon seit Jahren von Hause aus unterstützt. Postgres beherrscht mehrere Sprachen für Stored Procedures. Gerade Python hat gewisse Vorzüge im OOP Design Wenn ich mich nicht irre (Was ich leider sehr oft tue ), dann kann bei den Stored Procedures kein Benutzer zugreifen oder? Und genau diese ist ja bei meinem Browesergame notwendig. das ist eine Sache der Rechteverwaltung und der Art der Stored Procedure. Nicht jede SP muss ja auch für den User zugänglich sein, sondern kann sich hinter Triggern innerhalb der entsprechenden Tabellen verbergen, in diesem Fall benötigt der Benutzer keinen Zugriff. @Carnie Die Idee mit dem Cronjob ist (sofern es überhautp ein Unix ist) eine Möglichkeit, aber eben sehr ineffizient bzw. die Sache mit der Endlosschleife ist nicht elegant. Hier wäre wirklich ein Dienst in C oder C++ geschrieben eine sinnvollere Alternative, da dazu kein Interpreter benötigt wird und es eben Maschinencode ist, der schneller ausgeführt wird. Ich gehe bei einem Browsergame von mehreren 1000 simultanen Zugriffen auf den Webserver, Datenbank und ggf. Anwendungsserver aus HTH Phil Zitieren
flashpixx Geschrieben 25. Juni 2008 Geschrieben 25. Juni 2008 Das ist doch Blödsinn. Wieso sollte mysql kein Datenvolumen verarbeiten können, wie es bei so nem kleinen Browserspielchen zustande kommt? siehe z.B. Database test: Sun UltraSparc T1 vs. AMD Opteron (9/10) | Tweakers.net Ja, keiner sagt dass mysql schneller ist als pgsql, aber unbrauchbar ist mysql auch nicht. bestreitet auch keiner. Der OP hat nur nicht den Rahmen definiert. Wenn mySQL ausreichend ist, gerne. Aber es gibt auch andere DBMS Lösungen, die unter Umständen für die Problemstellung sinnvoller wären. Außerdem wird er keinen Provider finden, der ihm pgsql zum webspace anbietet Und bei seinen Kenntnissen ist ein root-server auch nicht das, was du ihm empfehlen willst, oder? Root-Server ist nur etwas für Leute, die in der Materie fit sind! Aber nicht jedes Webpaket bietet Cronjobs an usw. D.h. ohne entsprechende Kenntnisse ist es schwer, entsprechend die Dimensionen einzugrenzen. Ebenso auch die Programmierung: Wenn bei jedem Aufruf eine neues Verbindungshandel (z.B. persistent) zur Datenbank geöffnet wird, dann wird das bei 1000... Usern sehr schnell die Datenbank in die Knie zwingen. Ebenso wenn man nicht "transaktionssicher" arbeitet. Viele Probleme treten bei kleinen Userzahlen nicht auf, steigt die Zahl kann man nun mal sehr schnell an die Grenzen kommen, wenn das Konzept nicht vorher entsprechend erarbeitet wurde HTH Phil Zitieren
Aiun Geschrieben 25. Juni 2008 Geschrieben 25. Juni 2008 Wenn du einen System Prozess laufen lässt der deine Berechnungen alle 30 sekunden macht, dann pass auf das du nicht "zusätzlich" bei usereingaben alles live berechnest. Teile klar auf was der user direkt verändern kann und was getimed alle 30 sekunden geschieht. Persönlich halte ich von Stored Procedures wenig, damit verteilst du nur die Logik in verschiedene Sprachen und wirst auf dauer unflexibel (meine Meinung ! *g*) Zitieren
geloescht_JesterDay Geschrieben 25. Juni 2008 Geschrieben 25. Juni 2008 Persönlich halte ich von Stored Procedures wenig, damit verteilst du nur die Logik in verschiedene Sprachen und wirst auf dauer unflexibel (meine Meinung ! *g*) Das ist in der Client/Server Entwicklung aber ganz normal. Für manche Dinge sind SP eben einfach unschlagbar. Ich hab damit meinen Client schonmal um Faktor 1000 beschleunigt. Ja, klingt arg, aber eine Wartezeit von einigen Minuten auf wenige Sekunden ist auch arg. Ohne SP musst du u.U. sehr viele kleine Abfragen machen, die im Client verarbeiten und dann wieder an die DB senden. Das macht eine SP direkt z.B. Zitieren
geloescht_JesterDay Geschrieben 25. Juni 2008 Geschrieben 25. Juni 2008 Aber es gibt auch andere DBMS Lösungen, die unter Umständen für die Problemstellung sinnvoller wären. Ich denke einfach mal, wenn er in solche Bereiche vorgedrungen ist, dann frägt er hier nicht mehr nach der Programmiersprache mit der er das entwickeln soll :e@sy Zitieren
Shadowman Geschrieben 26. Juni 2008 Geschrieben 26. Juni 2008 mittlerweile ist MySQL aber auch mächtiger geworden. Cronjobs werden eigentlich nicht mehr benütigt, da MySQL mittlerweile jobs erledigen kann. Wenn du MySQL verwenden willst sollteste dir den EVENT befehl mal ansehen. Ausserdem die angesprochenen kleinen abfragen...man kann Trigger verwenden. ich glaube seit version 5 ist das alles mit drin. es könnte aber auch eine minimal fortgeschrittenere version sein, die das beinhaltet. jedenfalls wird es nicht vor version 5 unterstützt. darauf solltest du achten. du wirst dir auf jeden fall ziemlich viele gedanken machen müssen, wenn du deine statements schreibst um so wenig overhead zu produzieren wie möglich. das alleine hebt dann die performance schon wieder bedeutlich an Zitieren
geloescht_JesterDay Geschrieben 26. Juni 2008 Geschrieben 26. Juni 2008 Ausserdem die angesprochenen kleinen abfragen...man kann Trigger verwenden. Wenn das was bringen würde. tut es aber nicht immer. Im angesprochenen Fall wäre das überhaupt keine Lösung gewesen Ein kleines Serverprogramm was viele Daten abfrägt, kombiniert, verknüpft neue Daten schreibt... Da hilft dir kein Trigger. Aber eine StorecProcedure. Zitieren
flashpixx Geschrieben 26. Juni 2008 Geschrieben 26. Juni 2008 Hallo, ich denke, es kommt auf das Konzept des Games an. Z.B. wenn ich aufwendige "Routen" berechnen muss, dann werde ich das nicht innerhalb der Datenbank machen, sondern durch einen ausgelagerte Anwendung / Dienst. Ich denke man kann / muss an manchen Stellen Stored Procedures und Trigger einsetzen. Ich denke eher dass das ganze so sein soll, dass die Weltzeit auch "ohne Webzugriff" weiter laufen soll, so dass eben ein Dienst im Hintergrund läuft. Ich denke das Konzept der Anwendung ist hier der erste Schritt, damit das Spiel entsprechend skaliert. Phil Zitieren
Youser Geschrieben 26. Juni 2008 Geschrieben 26. Juni 2008 Der erste Schritt ist wohl, sich eine funktionierende Spielmechanik auszudenken die Langzeitmotivation bietet, ausbalanciert ist und und und... So lange man keine ausgereifte Spielidee hat braucht man über die Mittel der Umsetzung kaum nachdenken. Und yet another Galaxywars Clone zu schreiben ist doch eher sinnlos. Also hopp hopp, lass dir was geniales einfalln ! Sonst spielt den Kram eh niemand. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.