Erbitte euere Meinung!



  • Hi,

    Ich will ein Online-Game in angriff nehmen. Jedoch bin ich mir nicht sicher ob die Updates per CGI-programm(bei jedem Tick Update aller User ) oder per PHP-Script(Update User per Nachfrage ).

    Ich hab mir folgende Nach/Vor-teile aufgeschrieben:

    CGI-Programm:

    • schlecht: Was ist wenn es abstürtzt ?
    • schlecht: Man muss jeden User updaten
    • schlecht: Bei vielen Usern, ein langes Update pro Tick
    • gut: Logische abfragen werden einfacher, - weniger bugs

    PHP-\1:

    • gut: Ist sicher, -> kein absturz ?
    • gut: Nur jeder aktive User wird geupdatet

    Was für erfahrungen habt ihr gemacht oder was würdet ihr vorschlagen ?

    Ich bitte um konstruktive Kritik! Danke

    Bye


  • Mod

    Abgesehen davon, dass ich den Unterschied zwischen CGI und PHP jetzt gerade nicht verstehe:

    Ein allgemeines Updaten ist besser. Sonst kommst du in konflikte wenn die user miteinander agieren - und auf unterschiedlichen 'tick stufen' sind.

    Einfach nen cronjob im hintergrund laufen lassen und alles aktualisieren - da sparst du dir ne Menge arbeit.



  • Ein nicht-Php-CGI-Programm (Perl, C++, wie auch immer) wird doch auch bei jedem Aufruf neu gestartet, warum sollte es also mehr Absturzprobleme geben als bei Php?
    Das läuft ja nicht als Serverprogramm dauernd im Hintergrund wie z.B. ein Webserver. Außerdem denke ich ein compiliertes C++-CGI hat Performance vorteile (kein interpreter), oder irre ich mich da?



  • "Was ist wenn es abstürtzt ?"
    Der Browser liefert nen "500 Internal Server Error"

    php kann genauso gut abstürzen (z.B. schmierte mir mal php beim Benutzen der GD-Library mit extrem großen Bildern ab und da ich es damals als apache-modul installiert hatte, hat es sofort den ganzen apache mit in den Tod gerissen ;D)

    Warum unterscheidest du zwischen php-script und cgi-app ?
    Prinzipiell kannst du mit beiden doch das gleiche machen 😕



  • Ich dachte, CGI währe nur die Schnittstelle, um mit dem browser zu kommunizieren, die von PHP, perl und anderen Sprachen genutzt werden kann...
    lieg ich da etwa falsch ?

    gruß - richi



  • Ich dachte, CGI währe nur die Schnittstelle, um mit dem browser zu kommunizieren

    Eher mit dem Webserver.....Allerdings verstehe ich die Problematik dieses Threads irgendwie auch nicht.



  • Shade Of Mine schrieb:

    Abgesehen davon, dass ich den Unterschied zwischen CGI und PHP jetzt gerade nicht verstehe:

    Klar, beides sind CGI programme. Es geht hier aber nur um das verwenden von einem C++ App oder einem PHP-Script!

    Shade Of Mine schrieb:

    Ein allgemeines Updaten ist besser. Sonst kommst du in konflikte wenn die user miteinander agieren - und auf unterschiedlichen 'tick stufen' sind.

    Hm, das würde auch klappen, man muss einfach bei beiden User die fehlenden Ticks zum aktuellen Ticks updaten, sodass sie wieder auf dem aktuellen Stand(Tick) sind.

    Shade Of Mine schrieb:

    Einfach nen cronjob im hintergrund laufen lassen und alles aktualisieren - da sparst du dir ne Menge arbeit.

    Richtig, aber mein Problem ist hier, falls zu viele User registriert sind, gibt es eine sehr hohe update-zeit, so müssen inaktive User immer wieder aktuallisiert werden!
    Mit eine PHP-Script ( "Update User per Nachfrage"=>also nur die User die wirklich spielen ) kann man meiner Meinung nach die Serverauslastung erheblich senken.

    CGI-BIN schrieb:

    Ein nicht-Php-CGI-Programm (Perl, C++, wie auch immer) wird doch auch bei jedem Aufruf neu gestartet, warum sollte es also mehr Absturzprobleme geben als bei Php?

    Also falls mal mein C++ App abstützt, ist das spiel im Prinzip aus, außer ich würde eine weitere Applikation schreiben die dafür sorgt, dass das ganze dauerhaft läuft.
    Mit PHP ist das ganze einfacher! Falls es absürzt, kann man gerade F5 drücken und der Kässel ist wieder geflickt 🙂

    Aber das ist nicht wirklich mein größtes Prob. Das ist lösbar 🙂

    Eher frage ich mich, ob jetzt PHP-Script oder nicht ... 🙄

    Bye


  • Mod

    JayJay schrieb:

    Shade Of Mine schrieb:

    Ein allgemeines Updaten ist besser. Sonst kommst du in konflikte wenn die user miteinander agieren - und auf unterschiedlichen 'tick stufen' sind.

    Hm, das würde auch klappen, man muss einfach bei beiden User die fehlenden Ticks zum aktuellen Ticks updaten, sodass sie wieder auf dem aktuellen Stand(Tick) sind.

    Natürlich geht es. Aber es wird sehr komplex und es gibt viele Spezialfälle zu beachten.

    Shade Of Mine schrieb:

    Einfach nen cronjob im hintergrund laufen lassen und alles aktualisieren - da sparst du dir ne Menge arbeit.

    Richtig, aber mein Problem ist hier, falls zu viele User registriert sind, gibt es eine sehr hohe update-zeit, so müssen inaktive User immer wieder aktuallisiert werden!
    Mit eine PHP-Script ( "Update User per Nachfrage"=>also nur die User die wirklich spielen ) kann man meiner Meinung nach die Serverauslastung erheblich senken.

    Einfach alle inaktiven User kicken.
    Ein per Nachfrage Script kann ordentlich zuschlagen wenn ein paar User die lange nichts mehr gemacht haben gleichzeitig wieder online gehen -> dann muss das script ne Menge ticks verarbeiten.

    Und vergiss nicht das Synchronisationsproblem, das auftreten kann, wenn jeder auf ner anderen Tickstufe steht.

    CGI-BIN schrieb:

    Ein nicht-Php-CGI-Programm (Perl, C++, wie auch immer) wird doch auch bei jedem Aufruf neu gestartet, warum sollte es also mehr Absturzprobleme geben als bei Php?

    Also falls mal mein C++ App abstützt, ist das spiel im Prinzip aus, außer ich würde eine weitere Applikation schreiben die dafür sorgt, dass das ganze dauerhaft läuft.
    Mit PHP ist das ganze einfacher! Falls es absürzt, kann man gerade F5 drücken und der Kässel ist wieder geflickt 🙂

    Blödsinn. Wenn das Script Fehlerhaft ist - musst du es ausbessern. Egal ob es C++, PHP oder Brainfuck ist.



  • 😕
    Hier wird jetzt nen php-script verglichen dass bei jedem Seitenaufruf updated und nen C++ App, dass die ganze Zeit läuft ?! - Dann hat das C++ App aber nichts mit cgi zu tun ?!?!

    Wenn das C++ App sich nicht beendet und als cgi läuft wird es doch vom apache automatisch nach ner bestimmten timeout-zeit gekilled oder nicht ?!
    Das gleiche gilt für ein php-script...


  • Mod

    geeky schrieb:

    😕
    Hier wird jetzt nen php-script verglichen dass bei jedem Seitenaufruf updated und nen C++ App, dass die ganze Zeit läuft ?! - Dann hat das C++ App aber nichts mit cgi zu tun ?!?!

    Wieso sollte die C++ Anwendung die ganze Zeit laufen?
    Die wird per cronjob alle 30 Minuten (oder so) gestartet, updatet alles, und beendet sich wieder.



  • Naja, weil es ansonsten keinen Unterschied zwischen php-script und c++ app gibt - Abgesehen davon dass das c++ app ein kleinwenig schneller sein dürfte, die meiste Zeit dürfte ja bei der Datenbank draufgehen...



  • geeky schrieb:

    Naja, weil es ansonsten keinen Unterschied zwischen php-script und c++ app gibt - Abgesehen davon dass das c++ app ein kleinwenig schneller sein dürfte, die meiste Zeit dürfte ja bei der Datenbank draufgehen...

    Eigentlich geht es ja um was anderes, wie Shade of Mine angesprochen hat.

    Also wie es aussieht tendier ich stark zum php-script update. Man spart sehr viele mysql-abfragen, weil nur speziell die geupdatet werden de auch wirklich spielen.

    Oder bekomm ich vielleicht doch noch ein gutes Gegenargument bzw. ein Argument dafür, das mich versichert ?

    Cu


  • Mod

    JayJay schrieb:

    Oder bekomm ich vielleicht doch noch ein gutes Gegenargument bzw. ein Argument dafür, das mich versichert ?

    Mehr als das was ich schon genannt habe gibt es nicht. Zumindestens nichts grosses mehr. Wenn du damit leben kannst - was spricht dann gegen deine Lösung?



  • Shade Of Mine schrieb:

    JayJay schrieb:

    Oder bekomm ich vielleicht doch noch ein gutes Gegenargument bzw. ein Argument dafür, das mich versichert ?

    Mehr als das was ich schon genannt habe gibt es nicht. Zumindestens nichts grosses mehr. Wenn du damit leben kannst - was spricht dann gegen deine Lösung?

    eig. gar nichts, ausser, dass ich mich nochmal versichern wollte. Aber ich denke nochmal darueber nach.
    Jedenfalls, vielen dank fuer euere Posts!

    Bye



  • @JayJay
    Ich verstehe dein Problem mit den aktiven und inaktiven Spielern nicht ganz. Soll aktiv und inaktiv gleichbedeutend mit online und offline sein? Wenn das so ist, dann kannst du doch speichern wer grad online ist und deine Berechnungen usw. nur für diese Spieler durchführen.



  • Das (Problem) liegt doch nur in der Interaktion der verschiedenen Spieler untereinander. Sagen wir mal ein Spieler lässt sich Infos von einem anderen Spieler geben (also er klickt ne Info-Page an) dieser andere User war aber schon seit 20Ticks nicht mehr online, und auch kein anderer Spieler stand mit ihm in Interaktion.
    Das heisst das beim laden der Infoseite alle Infos des anderen Spielers auf den aktuellen Stand gebracht werden müssen (bevor irgendwas angezeigt wird). Allerdings muss man dann ein ziemlich ausgeklügeltest Funktionen-Prinzip entwerfen. Denn durch die Tickweise! Abarbeitung des anderen Spielers (bis zum aktuellen Stand) können ja wieder Nebeneffekte auftreten, die wieder Nebeneffekte und diese wiederum usw. auslösen.

    Da musste du dir vorher sicherlich über die Struktur einige Gedanken machen das das dann auch richtig klappt.

    Ein Programm das zu jedem Tick einmal läuft ist da natürlich viel einfacher zu realisieren. Alle Spieler machen ihre Änderungen, zum vollen Tickt wird dann das gesamte Game geupdated. (Das birgt aber auch ein paar Risiken was die Reihenfolge etc. angeht).

    Also wenn die (PHP)-Version gut realisiert ist müsste es bestimmt sehr gut damit klappen. Allerdings würde ich schätzen das sie um längen schwieriger zu realisieren ist.

    Du kannst auch ein CGI-Programm in PHP schreiben und es dann zum Beispiel als Crownjob zu jeden Tick starten.



  • Wie kann man ein CGI-Programm als cron-job starten? CGI-Programme heißen doch nur so, weil sie die CGI-Schnittstelle benutzen, d.h. Sie müssen übers Web gestartet werden, weil sie ja sonst ganz normale Programme sind.


  • Mod

    CGI-BIN schrieb:

    Wie kann man ein CGI-Programm als cron-job starten? CGI-Programme heißen doch nur so, weil sie die CGI-Schnittstelle benutzen, d.h. Sie müssen übers Web gestartet werden, weil sie ja sonst ganz normale Programme sind.

    Mit CGI Programm bezeichnet man meistens Programme die auf dem server laufen - meistens Scripte.

    Dies ist natürlich nicht korrekt - aber wayne interessiert es?

    Sofern das Programm nicht von GET/POST Werten oder anderen CGI spezifischen Werten abhängig ist, kann man es ja ganz normal starten.



  • Shade Of Mine schrieb:

    Sofern das Programm nicht von GET/POST Werten oder anderen CGI spezifischen Werten abhängig ist, kann man es ja ganz normal starten.

    Und ansonsten startet man wget per cron-job.



  • okay 🙂

    man kann ein Programm/Skript mit PHP schreiben und das dann las Crownjob anstoßen. Nix mit CGI - passt scho 🕶


Log in to reply