Eventhandler in php realisieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Eventhandler in php realisieren

    Servus!

    Ich suche nach einer eleganteren Variante einen Eventhandler zu realisieren:
    Folgende Basis: Browsergame in php auf ner Mysql-DaBa.

    Jetzt tut der user in seinem account etwas, sagen wir er baut ein gebäude. dieses wird mit der endzeit für die fertigstellung des gebäudes in die daba eingetragen.

    so, nun muss ich ständig prüfen ob gerade ein gebäude fertig wird, also prüfe ich mehr oder weniger ununterbrochen ob ein event (z.b. das fertige gebäude) anliegt. wenn ja wird das gebäude als fertig in die daba eingetragen und somit der bau abgeschlossen.

    Hat jemand ne Idee wie man das lösen kann ??

    Bin für jeden vorschlag / kommentar dankbar!
    mfg, smoop
    ... who cares ...

  • #2
    Wieso trägst du nicht einfach die zeit ein wann das Gebäude fertig ist (also jetzige zeit + bauzeit) und lässt zusätzlich ein Javascript (mit der differenz der fertigstellungszeit und jetzigen zeit) also countdown, und wenn das dann auf null steht, das es automatisch neu ladet, das php script prüft dann ob die Zeit vorüber ist, wenn ja dann als fertig makieren, wenn nein die zeit für JS ausgeben (damit das weiter runter-zählen kann)

    Kommentar


    • #3
      problem was ich an deiner lösung sehe:

      - der user hat nicht die ganze zeit seinen browser auf wo das vorgeschlagene JavaScript laufen kann.
      das gebäude soll ja auch fertig sein wenn er sich aus und später wieder einloggt.
      - der eventhandler soll für alle events zu gebrauchen sein. also nicht für jeden user ein eigener, sondern einer der alles handled... ebenso nicht nur für gebäude sondern auch andere ereignisse. (z.b. abgeschlossene forschungen, ankommende flotten etc..)

      es geht mir eher um eine geschickte lösung um die ständigen zugriffe auf die daba einzudämmen...

      thx so far, smoop
      ... who cares ...

      Kommentar


      • #4
        Cronjob auf ne PHP-Datei setzen, die dann z.B. 1x / Minute prüft ob was fertig wurde.
        Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
        var_dump(), print_r(), debug_backtrace und echo.
        Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
        Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
        Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

        Kommentar


        • #5
          Original geschrieben von Shurakai
          Cronjob auf ne PHP-Datei setzen, die dann z.B. 1x / Minute prüft ob was fertig wurde.
          Na der Server wird sich bestimmt bedanken....

          Angenommen, dass ganze ist so aufgezogen, dass der Spieler z.B. stündlich Ressourcen bekommt, dann würde ich in diesen Ressourcen-Cronjob einen Eintrag machen, dass er VOR der Ressourcenausgabe alle fertigen Gebäude "für die Ressourcenausgabe registriert".

          Des weiteren würde ich in einer Datei, die der Spieler aufruft prüfen, ob etwas im bau ist bzw. schon fertig gestellt ist und dann ggf. als fertiggestellt eintragen.

          Kommentar


          • #6
            cronjobs wären ne lösung, jedoch bei 1000 Usern oder mehr schon ziehmlich serverlastig.

            Du könntest ja auch eine datei machen, die für den übergebene userID dann alles berechnet, und zwar:
            wurde ein neues gebäude fertiggestellt:
            -ressourcen bis fertigstellungsdatum berechnen
            -ressourcen von fertigstellundsdatum bis jetzt berechnen (werden warsch. mehr rauskommen da höhere stufe?!?)

            und das dieses script nicht nur aufgerufen wird wenn sich der eigene user online befindet, sondern auch wenn z.b. jemand angreift (?) oder allgemeiner, wenn ein andere user eine aktion mit einem zweiten hat (von beiden wird das script aufgerufen: id1, id2...)

            hoffe es war halbwegs verständlich
            bin noch etwas müde

            Kommentar


            • #7
              erstmal thx an euch alle, die sich die mühe gemacht haben...

              so, wie PhilW das vorgeschlagen hat hab ich das im moment gelöst.
              Die Prüfung auf neue fertiggestellte Gebäude wenn auf den Planeten von wem auch immer (user selber oder angreifer) zugegriffen wird.

              für die flotten denke ich aber kommt man um den eventhandler nicht drumrum.
              Dafür hab ich atm auf dem webserver ein php.script in ner endlos schleife laufen, das ständig prüft ob eine flotte einen planeten erreicht und dann jeweils die aktionen ausführt (angriff, rohstoffe abliefern, landen.. etc..)

              das klappt soweit eigentlich ganz gut, wollte halt nur ranfragen ob es da noch günstigere Arten gibt sowas zu behandeln, zumal ich festgestellt habe das es ne ganze menge leute gibt die was ähnliches wie ich in php realisieren... !?
              ... who cares ...

              Kommentar


              • #8
                Original geschrieben von smoop
                Dafür hab ich atm auf dem webserver ein php.script in ner endlos schleife laufen
                Und das hält der Server aus? Wie viele Spieler gibts den bzw. sollens werden, wenn man (aus neugier) fragen darf?

                Kommentar


                • #9
                  Na der server is n schwachbrüstiger 900er Via epia - hau-mich-tot-ich-hab-keine-leistung

                  Bissl mit grips is die endlosschleife auch - die sleep't für entsprechende anzahl sec bis zum nächsten event. zugegeben würden 100 anfragen in der sec die kiste sicher bei zeiten overkillen

                  Hat denn hier niemand mal was ähnliches gemacht ?
                  würde mich interessieren wie das jemand anders gelöst hat
                  ... who cares ...

                  Kommentar


                  • #10
                    ich sehe php nicht wirklich als performant fuer solche aufgaben an. ich wuerde ein geschicktes caching-system und ein c-programm (oder aehnliches) im hintergrund bevorzugen. php nur zur ausgabe der informationen.
                    das waere imho die schnellste und effektivste loesung.
                    1101100 1101001 1100110 1100101 1101001 1110011 1100001 1100010 1101001 1110100 1100011 1101000

                    /(bb|[^b]{2})/

                    Kommentar


                    • #11
                      @ loci:
                      da kannst du sicher recht haben, aber die Frage nach der systematik um diese prüfung durchzuführen stellt sich ja erstmal unabhängig von der sprache.

                      ob nun php ständig die Daba checkt oder c ist doch erstmal zweitrangig oder übersehe ich da etwaige vorzüge ??

                      und was stellst du dir unter dem cachingsystem vor ?
                      Zuletzt geändert von smoop; 18.04.2005, 08:09.
                      ... who cares ...

                      Kommentar

                      Lädt...
                      X