Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Browsergame-Technik?

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Browsergame-Technik?

    Hi!

    Man sieht ja zur Zeit immer mehr Browser-Games (z.B. Droidwars oder Spacepioneers...)

    Was ich mich schon öfters gefragt habe und jetzt endlich mal wissen will:

    Wie funktionieren denn diese Games so wie sie wollen.
    Wenn ich so ein Spiel entwerfen wollte würde ich bei folgendem Problem hängen bleiben.

    Wie funktioniert das mit der Zeit. z.B. werden Gebäude gebaut und Angriffe geführt, und das alles geschieht ja ohne das der Spieler die ganze Zeit eingeloggt ist.
    Im Grund muss doch dauernd ein (oder sogar mehrere) Thread laufen, oder?
    Mit was für einer Sprache wird denn sowas gemacht? PHP kann das nicht oder?
    Und wenn ja wie kann man so viele Informationen bewältigen?
    Es gibt ja manchmal 4000 Spieler, jeder baut im schnitt ein Gebäude und hat eine Forschung laufen und vielleicht ein Angriff.
    Das wären ja ca. 10000 Informationen die zu verarbeiten sind.

    10000 Timer oder Threads sind ja schon ziemlich viel, oder?

    Gibt es da vielleicht irgendwo eine Doku drüber, wie man sowas löst bzw. wie sowas am besten Funktioniert und mit welcher Web-Sprache..

    MfG, Alex

  • #2
    kannst die sekunden zählen, bis der thread in "anfänger" verschobe wird...

    3
    2
    1
    und wech...

    Kommentar


    • #3
      Hmm das soll ein ANfängerthema sein?

      Nagut...

      Kommentar


      • #4
        Man postet dort, wo sein eigener Stand ist, BG's sind nichts für anfänger, vieleicht mal die suchfunktion benutzen, dann weist du schnell wie beliebt (nur zur info, das ist ironisch gemeint) das Thema Browsergames hier begründeteter Weise ist.

        Ich würde mal Sagen, die Ferien sind im gange .... *G*

        und vieleicht erst lesen und dann posten: http://www.phpfriend.de/forum/ftopic21431.html

        vieleicht auch mal interessant: http://www.phpfriend.de/forum/ftopic31617.html

        und wenn ich mir die Fragen mal anschaue, lassen die sich alle ohne probleme beantworten wenn du mal bissel eigeninitiative zeigst, die suchfunktion benutzt und dir threads zu dem thema anschaust, oder mal bissel google benutzt.

        mfg
        robo47
        [URL="http://www.robo47.net"]robo47.net[/URL] - Blog, Codeschnipsel und mehr
        | :arrow: [URL="http://www.robo47.net/blog/192-Caching-Libraries-and-Opcode-Caches-in-php-An-Overview"]Caching-Klassen und Opcode Caches in php[/URL] | :arrow: [URL="http://www.robo47.net/components"]Robo47 Components - PHP Library extending Zend Framework[/URL]

        Kommentar


        • #5
          Cronjobs etc. sind aber auch nicht unbedingt ein Profi-Thema, v.a. weil wir ziemlich genau diese Frage schon mehrfach hier hatten.

          Der Beitrag wurde verschoben, wegen...
          ... Postings im falschen Forum. Bitte beim nächsten Mal darauf achten..

          Bemerkung:
          Die gestellte Frage entspricht nicht dem Wissensstand eines Profis. Dazu: http://www.phpfriend.de/forum/viewtopic.php?t=21431

          moved to PHP - Fortgeschrittene
          mod = master of disaster

          Kommentar


          • #6
            Ich habe es bei meinem Browsergame einfach so gemacht:

            Es gibt eine Tabelle "Events", oder mehrere tabellen "Bauaufträge", "Forschungsaufträge" usw.

            es gibt eine spalte "Timestamp", in der der timestamp steht, an dem das ereignis (z.b. fertigstellung eines gebäudes) stattfindet.
            Nun nimmst du eine datei, die vor jede anderer datei includet wird, die immer nach events sucht, deren timestamp in der vergangenheit liegen, macht das, was die events vorschreiben und löscht den eintrag. Falls das zuviel rechenaufwand ist, beschränke das ganze auf seiten, wo es auch wirklich wichtig ist, dass alles auf dem neusten stand ist. Das macht die ganze sache allerdings buganfälliger.

            Kommentar


            • #7
              Was heißt hier buganfälliger! Das funktioniert genauso wie wenn du Cronjobs verwendest! Wenn nicht noch besser weil du automatisch die Fehler angezeigt bekommst bei Cronjobs is das so ne Sache! Außerdem sollte man immer so programmieren das man Bugs relativ schnell findet

              Kommentar


              • #8
                Zitat von RaZoR
                Das funktioniert genauso wie wenn du Cronjobs verwendest
                von Cronjobs habe ich doch garnicht geredet. Die sind wahrscheinlich je nach hoster (net alle bieten das an) ne feine methode, aber rohstoff-förderung kriegt man damit nicht hin, kannst ja net für jedes geförderte gramm n cronjob setzen...

                Kommentar


                • #9
                  Als eine weitere Möglichkeit des event-handlings kämen daemons in frage die die oben genannte eventhandler tabele 'abarbeiten' und die events in Echtzeit ausführen. Das ist sehr sinnvoll wenn man sehr viele spieler hat. Diese daemons laufen als eigenständiger server permanent im hintergrund. Sie verbrauchen sehr viel weniger rechenzeit im vergleich zu includeten update-scripts die bei jedem seitenaufruf abgearbeitet werden müssen.

                  In meinem fall verbindet sich das spiel-script über UNIX domain sockets mit dem event-handler daemon und sendet z.b. den ausgeführten Bauauftrag an den daemon.
                  Wenn dann der timestamp für das event ereicht ist wird es ausgeführt.
                  Tabellenlayouts sind out, Browsergames sind schei$$e und die Erde ist eine Scheibe.

                  Kommentar


                  • #10
                    ich bin zwar eigentlich kein PHP-Profi, aber ich frage mich wieso das hier alles so komplex beschrieben wird?

                    Jede Aktion wird eben dem Spieler zugeordnet und wenn das nächste mal ein Zugriff erfolgt auf eine Seite wo das entsprechende Element benötigt wird, wird es aktualisiert. Zu sowas sind verknüpfte Tabellen da.

                    Wenn niemand das Ergebnis sehen wird, wird es auch niemals aktualisiert. Auch soetwas wie rohstoffförderung ist ja nix andres als eine REchnung wieviel Zeit vergangen ist und was da geleistet wurde. Es wird einfach der letzte Aufruf protokolliert und bei der nächsten Interaktion, egal von wem mit dem entsprechenden Objekt wird das aktualisiert.

                    Soweit meine Meinung dazu.

                    Gruß HaVoK

                    Kommentar


                    • #11
                      Zitat von havok
                      Jede Aktion wird eben dem Spieler zugeordnet und wenn das nächste mal ein Zugriff erfolgt auf eine Seite wo das entsprechende Element benötigt wird, wird es aktualisiert. Zu sowas sind verknüpfte Tabellen da.

                      Wenn niemand das Ergebnis sehen wird, wird es auch niemals aktualisiert.
                      (ohne den kompletten Thread gelesen zu haben)

                      Eventuell dauert diese erste Berechnung aber sehr lange, deshalb sollte sie dann besser unaufgefordert spät nachts, wenn Rechenresourcen des Rechners frei sind, automatisiert (Cronjob) erfolgen, damit der User nicht warten muss. Natürlich könnte es dann sein, dass Berechnungen umsonst gemacht wurden, weil sie keinen interessieren. Aber User-Komfort geht (gerade bei Browsergames) vor.

                      Kommentar


                      • #12
                        gut, du kannst das nachts mal generell durchrechnen lassen können,
                        ABER: tagsüber muss das ja auch aktualisiert werden wenn jemand draufklickt, daher muss diese Information eh immer mitgeschrieben werden.

                        spricht ja nichts dagegen, dass dann nachts einmall komplett durchrennen zu lassen

                        Kommentar


                        • #13
                          Wie wird das eigentlich genau gemacht? Wird da in der Server-Umgebung eingestellt, dass eine bestimmte Seite in gewissen Intervallen aufgerufen wird?

                          Kommentar


                          • #14
                            Zitat von Dr_Enquinox
                            Wie wird das eigentlich genau gemacht? Wird da in der Server-Umgebung eingestellt, dass eine bestimmte Seite in gewissen Intervallen aufgerufen wird?
                            Dafür gibt es Cronjobs.

                            Kommentar


                            • #15
                              Zitat von havok
                              Wenn niemand das Ergebnis sehen wird, wird es auch niemals aktualisiert.
                              Das ist wohl der Knackpunkt.
                              Trotzdem sollte der Thread geschlossen werden. Der Threadopener hat die Suchfunktion nicht benutzt, weder Google noch vom Forum

                              Kommentar

                              Lädt...
                              X