Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Browsergame Events

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Browsergame Events

    Hiho,

    nein ich bin keiner der in 10 minuten und ohne vorahnung ein Browsergame machen will, das vorweg

    Es geht darum ob es überhaupt möglich ist events mit PHP zu bearbeiten? Wenn man jetzt als Beispiel mal eines der bekannten Weltraumsimulationen nimmt kriegt man z.b. sekündlich Ressourcen und wenn man seine Flotten losschickt kommen diese z.b. erst nach einer Stunde an ihrem Ziel an. Vorher berechnen geht nicht weil sich das Ziel in der Zeit ja noch verändern kann.

    Ist das mit PHP überhaupt möglich, hat da jemand Ideen oder gar Praxiserfahrung?

    Es geht um ein recht komplexes Game und ein Server muss unter Umständen hunderte Events pro Sekunde berechnen.


    MfG Kai

  • #2
    Übliche vorgehensweise ist:
    - Alle vorgänge eines Users werden berechnet, sobalt er die nächste Aktion macht oder die nächste Aktion von seinen Daten abhängt.

    Aber zu deiner Frage:
    Vor kurzen habe ich das Problem in anderem Zusammenhang mal gefragt.
    Es gab hier die Tipps:
    http://www.php.net/manual/en/control....declare.ticks
    http://pear.php.net/manual/de/packag...dispatcher.php

    Habs noch nicht durchgearbeitet, aber vieleicht hilfts dir.

    Gruß
    Der Desian
    Wenn dich was ankotzt, machs besser.

    Kommentar


    • #3
      Zitat von DerDesian
      Übliche vorgehensweise ist:
      - Alle vorgänge eines Users werden berechnet, sobalt er die nächste Aktion macht oder die nächste Aktion von seinen Daten abhängt.
      Das dachte ich mir auch schon, mein Problem war allerdings hauptsächlich das dieses Event nicht nur 2 User angeht sondern z.b. die Punkte in der Rangliste aktualisiert werden müssen oder wenn einer Flotte zerstört wird auch das Trümmerfeld für alle angezeigt werden muss.

      Nun hatte ich grad die das jeder User im Hintergrund (Javascript Client) alle x Sekunden eine Datei aufruft die jedes mal einige anfallende Events berechnet, so könnte die Last verteilt werden und die Punkte etc. werden schnell aktualisiert, für den Fall das lange Zeit keiner online ist kann diese Datei zusätzlich jede Stunde von einem Cronjob aufgerufen werden.
      Denke so lässt es sich schon gut lösen...hatte wohl nen Brett vorm Kopf, da überleg ich Tagelang wie man das lösen kann und nun...naja Verbesserungsvorschläge seh ich trotzdem sehr gerne.

      Aber zu deiner Frage:
      Vor kurzen habe ich das Problem in anderem Zusammenhang mal gefragt.
      Es gab hier die Tipps:
      http://www.php.net/manual/en/control....declare.ticks
      http://pear.php.net/manual/de/packag...dispatcher.php
      Das beschäftigt sich mit Events innerhalb eines Scripts/Requests


      MfG Kai

      Kommentar


      • #4
        Das dachte ich mir auch schon, mein Problem war allerdings hauptsächlich das dieses Event nicht nur 2 User angeht sondern z.b. die Punkte in der Rangliste aktualisiert werden müssen oder wenn einer Flotte zerstört wird auch das Trümmerfeld für alle angezeigt werden muss.
        Das ruft doch aber auch ein Benutzer auf (Rangliste) oder eine Aktion (Flugroute), die berechnet wird, wird dadurch beeinflusst (längerer Weg).
        Also immer erst zum Zeitpunkt "Zeig es mir" die bisherigen Effekte berechnen.

        Kommentar


        • #5
          wenn hier schonmal ein paar leute darüber sprechen,

          gibt es eine online spiel was auf http basiert, das mit der X,Y und Z Achse Arbeitet ?

          Ich hatte sowas damals mal versucht, bin aber an der Komplexen Vektorrechnung geschweitert.

          mfg

          Nils F.

          Kommentar


          • #6
            Was meinst du mit "das mit der X,Y und Z Achse Arbeitet"? Wenn du sowas wie z.B. eine dreidimensionale Galaxie o.ä. meinst, dann z.B. www.omega-day.de

            Kommentar


            • #7
              Zitat von Bruchpilot
              Das dachte ich mir auch schon, mein Problem war allerdings hauptsächlich das dieses Event nicht nur 2 User angeht sondern z.b. die Punkte in der Rangliste aktualisiert werden müssen oder wenn einer Flotte zerstört wird auch das Trümmerfeld für alle angezeigt werden muss.
              Das ruft doch aber auch ein Benutzer auf (Rangliste) oder eine Aktion (Flugroute), die berechnet wird, wird dadurch beeinflusst (längerer Weg).
              Also immer erst zum Zeitpunkt "Zeig es mir" die bisherigen Effekte berechnen.
              Das Problem so ist ist doch, dass die ganze Last, die letzten Bewegungen des kompletten Systems zu berechnen dann bei einem Benutzer liegt, der auf seine HTML-Seiten wartet.

              Und das Problem, das du ansprichst, sehe ich nicht.

              Ich hab keine Ahnung, wie solche Browsergames aufgebaut sind, aber ich vermute mal, dass Objekte in dieser Virtuellen Welt Bewegungsvektoren besitzen, die deren Zustand in Abhängigkeit der Zeit verändern (Position, Ressourcen). Dazu wird es dann wohl Bedingungen geben, unter denen bestimmte Ereignisse (Events) ausgelöst werden (dazu fällt mir übrigends das PEAR-Paket FSM ein - hab mir das aber noch nicht näher angeschaut). Da werden sich dann wohl die Objekte ihre jeweils nächsten geplanten Zustandsänderungen in einen Zeit-Queue legen und sich selbst mit ihren Koordinaten in einem Objekt registrieren, dass den Raum repräsentiert und Events auslöst, wenn Kollisionen auftreten etc.

              Wenn das soweit korrekt ist, ist es letztlich Wurscht, wer wie oft die Berechnungen ausführt. Wichtig ist nur, dass jeder Prozess, hinter dem ein Benutzer einen aktuellen Zustand erwartet die Schlange solange abarbeitet, bis der aktuelle Zeitpunkt erreicht ist. Dabei kann jeder Punkt ja auch atomar bearbeitet werden, damit mehrere Prozesse gemeinsam, ineinandergreifend an der Queue arbeien können. Da hilft wohl nur, zu messen, wieviel Rechenleistung da gefragt sein wird, um eine sinnige Entscheidung treffen zu können, wie die Last verteilt werden muss. Aber es ist schon reichnlich unsinnig, im Sekundentakt das komplette Universum aufzubauen und wieder zu vergessen! Daher ist PHP hier sicherlich nicht tauglich - es sei denn, du lässt einen Prozess durchlaufen, natürlich.

              Basti

              Kommentar


              • #8
                Es gab und gibt mindesten zwei große Kategorien:
                kontinuierliche Simulation und diskrete Simulation.

                Zu beidem und den Anwendungsfeldern gibt es genug Einführungsmaterial (auch im Netz).

                Kommentar

                Lädt...
                X