Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Grundlegende Browserspielfragen

Einklappen

Neue Werbung 2019

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

  • #16
    Zitat von SirSnyder Beitrag anzeigen
    Nimm MariaDB statt MySQL
    Um auch einmal Fakten ohne Belegung hinzuschreiben: Vor MariaDB würde ich noch Percona empfehlen.
    [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

    Kommentar


    • #17
      Zitat von mYkon Beitrag anzeigen
      Nutz einen Eventdispatcher und lass Cronjobs laufen wenn du merkst, du hast zuviel Last auf dem Client-Request. Lass den Cronjob aber nicht Dinge herunterzählen. Was aber ok ist: Bemerken, dass das Haus fertig ist, den Status auf "done" setzen und von mir aus irgendwo die Fabrik freischalten. Aber genau das sollte auch Client-Seitig passieren, wenn es denn nötig sein sollte! Ansonsten muss der Client auf Cronjobs warten...
      Ich verstehe nicht so ganz was du mit herunterzählen meinst?!

      Aber ich finde es auch nicht gut erst dann zu rechnen wenn der User sich wieder einloggt bzw ein neuen Request ausführt. Das verlängert dann die Laufzeit des Scriptes (wurde hier ja schon gesagt) aber was ich noch viel wichtiger finde ist, dass es keine Balance mehr gibt.
      Nehmen wir mal an ich baue eine Fabrik. Die Fabrik gibt mir alle 5 min 100 Rohstoffe. Ich fange morgens um 6 Uhr mit dem Bau an (vor der Arbeit noch). Der Bau dauert 2 Stunden, wäre also u 8 fertig. Ich kann mich auf der Arbeit allerdings nicht einloggen, weil ich z.B auf dem Bau arbeite. Also logge ich mich erst wieder um 17 Uhr ein. Und erst jetzt wird berechnet ob der Bau fertig ist, obwohl er eigentlich schon um 8 Uhr fertig wäre. Mir gehen also dadurch 9 Stunden lang Rohstoffe verloren.

      Leute die sich also öfters einloggen haben also einen klaren Vorteil, da sie schneller an Rohstoffe oder was auch immer kommen.

      An TE: Du sagtest, du kennst dich mit JAVA aus?! Wäre das keine möglichkeit, in dieser Richtung etwas zu machen. JAVA könntest du auch 24/7 laufen lassen, wäre also Echtzeit.

      Kommentar


      • #18
        Ja chiller2000. Du hast dich vollkommen geirrt. Ein Benutzer rechnet nicht nur seine Events, sondern auch rekursive Events - also im Prinzip die Events jedes anderen Benutzers. Und deshalb wird es hier extrem mühsam und komplex.

        Ob Java da tatsächlich die bessere Idee ist... Du kannst auch PHP 24/7 laufen lassen - gar kein Problem.

        Persönlich würde ich den Ansatz mit den Runden bevorzugen. Wenn du einen Cronjob alle n Minuten ausführst kannst du eine Runde als vielfaches davon definieren, solange das Intervall n konstant bleibt.
        [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

        Kommentar


        • #19
          Aber ich finde es auch nicht gut erst dann zu rechnen wenn der User sich wieder einloggt bzw ein neuen Request ausführt. Das verlängert dann die Laufzeit des Scriptes (wurde hier ja schon gesagt) aber was ich noch viel wichtiger finde ist, dass es keine Balance mehr gibt.
          Nehmen wir mal an ich baue eine Fabrik. Die Fabrik gibt mir alle 5 min 100 Rohstoffe. Ich fange morgens um 6 Uhr mit dem Bau an (vor der Arbeit noch). Der Bau dauert 2 Stunden, wäre also u 8 fertig. Ich kann mich auf der Arbeit allerdings nicht einloggen, weil ich z.B auf dem Bau arbeite. Also logge ich mich erst wieder um 17 Uhr ein. Und erst jetzt wird berechnet ob der Bau fertig ist, obwohl er eigentlich schon um 8 Uhr fertig wäre. Mir gehen also dadurch 9 Stunden lang Rohstoffe verloren.

          Leute die sich also öfters einloggen haben also einen klaren Vorteil, da sie schneller an Rohstoffe oder was auch immer kommen.
          bei deinem Beispiel seh ich einen kleinen denkfehler man kann nämlich die bis dato produzierten rohstoffe auch ausrechnen lassen. Zeit seit beenden des Baus/5 Minuten * 100. Natürlich würde man hier wieder das berechnen dem nutzer aufdrücken, wenn er sich einloggt, aber in kleineren maßen, wie in deinem beispiel braucht man keinen cronjob oÄ.

          Es kommt halt immer auf die komplexität an.
          Current Projects: http://www.welten-buch.de, http://neu.zooadoo.de

          Kommentar


          • #20
            Zitat von Geromel Beitrag anzeigen
            bei deinem Beispiel seh ich einen kleinen denkfehler man kann nämlich die bis dato produzierten rohstoffe auch ausrechnen lassen. Zeit seit beenden des Baus/5 Minuten * 100. Natürlich würde man hier wieder das berechnen dem nutzer aufdrücken, wenn er sich einloggt, aber in kleineren maßen, wie in deinem beispiel braucht man keinen cronjob oÄ.

            Es kommt halt immer auf die komplexität an.
            Daran habe ich auch schon gedacht, aber da wären wir, wie du selber sagtest, bei der Berechnungszeit. Ich persönlich finde es aber auch per Cronjob auch um einiges einfacher. Denn wenn es nachher richtig komplex wird, musst du zu viel hin und her rechnen. Wenn du z.B die genannte Fabrik hast die alle 5 min etwas produziert, und ein Berkwerk das alle 10 min produziert, und immer so weiter.
            Und bei den Truppenbewegungen wird es dann nachher ja noch komplizierter...

            Kommentar


            • #21
              Der Cronjob hat auch den Vorteil, dass du die Berechnung in effizientere Sprachen (C?) auslagern kannst oder komplexe (alle?) Berechnungen auf effizientere Hardware. Siehe z.B. Gearman.
              [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

              Kommentar


              • #22
                Guten Abend,

                ich bedanke mich für die rege Teilnahme in diesem Thread, mit so vielen Antworten habe ich wahrlich nicht gerechnet. Im Laufe des heutigen Abends werd ich mich mal über alle hier angemerkten Methoden informieren und dann schauen ob sich mir direkt zeigt, auf welche ich wogl für mein Komzept zurückgreifen werde.

                Zitat von Asterixus Beitrag anzeigen
                Ich kann da ApoY2k nicht zustimmen.
                Wenn du Ereignisberechnungen durchführen willst, macht man sowas nicht mit Cronjobs. Dafür eignen sich Event-Dämonen viel besser - vor allem wenn du deine Spielideen mit die Stämme vergleichst.
                In diesen Programmen führst du alle Events, die ausgeführt werden sollen, chronologisch aus. Ein Cronjob ist nur eventuell dann geignet, wenn ein Tick wirklich nur alle zehn Minuten ist. Aber in deinem Fall gehe ich davon aus, dass du sekündliche Eventberechnungen brauchst.

                Ich kann zu MySQL seit den Versionen der letzten paar Monate nicht mehr raten. Bugs werden einfach nicht mehr behoben und ich denke, dass die Übernahme durch Oracle da nicht ganz unschuldig dran ist.

                Daher rate ich dir wirklich an, entweder eine nicht relationale Datenbank wie MongoDB zu benutzen, oder dann eine andere relationale wie Oracle oder PGSQL (und wenn du PG benutzt, wirst du bestimmt 'nen neuen Freund in diesem Forum finden).
                Das Stichwort Dämonen scheint mir hier Kernaussage zu sein, welche ich sehr zu schätzen weiß. Nach bisher nur grober Information darüber, scheint mir das sehr genau DAS zu sein, was ich suche.

                Zu der Diskussion der Datenbanken werde ich mir auch die Unterschiede der einzelnen genannten Möglichkeiten mal anschauen. Relationale Datenbanken sind mir bekannt und verständlich. Schätzungsweise wird es sich in diese Richtung gehen, aber ich werde der anderen Idee definitiv einige Blicke widmen.

                Zitat von chiller20000 Beitrag anzeigen
                Ich verstehe nicht so ganz was du mit herunterzählen meinst?!

                Aber ich finde es auch nicht gut erst dann zu rechnen wenn der User sich wieder einloggt bzw ein neuen Request ausführt. Das verlängert dann die Laufzeit des Scriptes (wurde hier ja schon gesagt) aber was ich noch viel wichtiger finde ist, dass es keine Balance mehr gibt.
                Nehmen wir mal an ich baue eine Fabrik. Die Fabrik gibt mir alle 5 min 100 Rohstoffe. Ich fange morgens um 6 Uhr mit dem Bau an (vor der Arbeit noch). Der Bau dauert 2 Stunden, wäre also u 8 fertig. Ich kann mich auf der Arbeit allerdings nicht einloggen, weil ich z.B auf dem Bau arbeite. Also logge ich mich erst wieder um 17 Uhr ein. Und erst jetzt wird berechnet ob der Bau fertig ist, obwohl er eigentlich schon um 8 Uhr fertig wäre. Mir gehen also dadurch 9 Stunden lang Rohstoffe verloren.

                Leute die sich also öfters einloggen haben also einen klaren Vorteil, da sie schneller an Rohstoffe oder was auch immer kommen.

                An TE: Du sagtest, du kennst dich mit JAVA aus?! Wäre das keine möglichkeit, in dieser Richtung etwas zu machen. JAVA könntest du auch 24/7 laufen lassen, wäre also Echtzeit.
                Hiermit sprichst du ein grundlegendes Problem an. Die Berechnung immer erst dann wenn der Nutzer wieder online ist, scheint für einige Sachen realisierbar und sinnvoll sein.
                Dämonen sind höchstwahrscheinlich relativ leistungsfordernd und ich sollte soviel wie möglich auslagern und über den Nutzer machen?
                Einige Dinge sind so leier nicht umsetzbar. Beispielsweise Truppenbewegungen (wurde auch schon genannt). Angenommen Spieler B greift Spieler A an und 5 Minuten später greift Spieler C ebenfalls Spieler A an. Wenn Spieler C nun online ist bevor A und B online sind, sollte das zu einigen Problemen führen.

                Eventuell habe ich hier das selbe Unverständnis wie chiller, dass hier angedeutet ist und ich werde darüber nochmal ein wenig nachdenken:
                Ja chiller2000. Du hast dich vollkommen geirrt. Ein Benutzer rechnet nicht nur seine Events, sondern auch rekursive Events - also im Prinzip die Events jedes anderen Benutzers. Und deshalb wird es hier extrem mühsam und komplex.
                Das würde bedeuten, dass sobald ein Spieler sich einloggt alle bis dahin aufgeschobenen Events berechnet werden, auf dem Client des Users?
                Je nach Anzahl der angestauten Events könnte das allerdings zu sehr großen Problemen führen?!

                Ich schätze in Java würde mir eine Realisierung einfacher fallen, es ist nicht so, dass ich hier perfekte Kentnisse habe, aber durchaus einiges mehr verstehe.
                Genau das ist jedoch auch der Grund, warum ich gerne PHP in Verbindung mit Javascript nutzen möchte. Das Projekt dient nicht ausschliesslichd er Realisierung des Projektes, sondern auch dem daraus entstehenden Lerneffekt. Deshalb kommen andere Sprachen für mich eigentlich nicht wirklich in Frage und die meisten meiner Verarbeitungen sollten in PHP.


                Ich bedanke mich für alle antworten hier und werde dann das Thema sehr zeitnah mal als erledigt markieren, ich schätze für meine Probleme habe ich genug Ansätze mit denen ich mich erstmal eingehender Beschäftigen kann, bevor ich hier weitere Fragen stellen sollte

                Liebe Grüße
                ChromOxid

                Kommentar


                • #23
                  Zitat von ChristianK Beitrag anzeigen
                  Ja chiller2000. Du hast dich vollkommen geirrt. Ein Benutzer rechnet nicht nur seine Events, sondern auch rekursive Events - also im Prinzip die Events jedes anderen Benutzers. Und deshalb wird es hier extrem mühsam und komplex.

                  Ob Java da tatsächlich die bessere Idee ist... Du kannst auch PHP 24/7 laufen lassen - gar kein Problem.

                  Persönlich würde ich den Ansatz mit den Runden bevorzugen. Wenn du einen Cronjob alle n Minuten ausführst kannst du eine Runde als vielfaches davon definieren, solange das Intervall n konstant bleibt.
                  Sorry, das habe ich total überlesen
                  Ich habe jetzt nur an den eingeloggten User gedacht. Also das jeder User nur seine eigenen Events berechnet.
                  Das was du meinst würde ich vollkommen ablehnen. Je größer das Spiel bzw je mehr Spieler das Spiel also spielen, desto länger werden die Ladezeiten, da ja mehr berechnet werden muss.
                  Das mit dem komplex haste ja selber schon gesagt. Wäre halt recht mühsam und ich denke auch mehr Arbeit.

                  Soweit ich das verstanden habe, möchte der TE ja keine Runden haben, sondern eben ein "Live-Spiel". Da finde ich Runden unpassend (Ich spreche hier von Runden in Stunden. Minuten < 5 wären noch akzeptabel). Auch allein schon wegen dem ganzen gerechne dann wenn die Laufzeiten/Bauzeiten verschieden sind.

                  An Java dachte ich, weil er sagte das er(TE) aus diesem Bereich kommt. Wäre also speziell für ihn einfacher.


                  Zitat von ChromOxid Beitrag anzeigen
                  Einige Dinge sind so leier nicht umsetzbar. Beispielsweise Truppenbewegungen (wurde auch schon genannt). Angenommen Spieler B greift Spieler A an und 5 Minuten später greift Spieler C ebenfalls Spieler A an. Wenn Spieler C nun online ist bevor A und B online sind, sollte das zu einigen Problemen führen.
                  Das ist zum Beispiel ein Szenario was ich meinte. Eines von wenigen. Deswegen, den Kampf so schnell wie möglich berechnen und gut ist.

                  Kommentar


                  • #24
                    Ich gehöre übrigens zum Entwicklerteam eines bald auf den Markt kommenden großen (leider ist nicht der Name groß, sondern die Software) Browsergames, daher habe ich schon einiges an Ahnung und kann sogar Tipps geben, die wir gerne gehabt hätten, als wir die Software designed haben ^^

                    Cron-Jobs eignen sich nur für Dinge, die ab und zu mal gemacht werden müssen. Wie du es genau rausgelesen hast, ist der Dämon der wichtigste Begriff =)
                    Den Dämonen kannst du übrigens auch in einer anderen Sprache schreiben; ich garantiere dir aber, dass wenn dein PHP-Code schon steht, wirst du das nicht mehr machen wollen, denn deine Klassen kannst du nicht einfach in Java wieder verwenden.

                    Und um auf etwas, was du gesagt hast, einzugehen: Dämonen sollten wirklich nur Events berechnen; dh. Aktionen, die stattfinden sollten, wenn keiner der betroffenen Benutzer eingeloggt ist.
                    Crashkurs zum Thema Rechtschreibung: [COLOR="Green"]normalerweise[/COLOR] ([COLOR="Red"]normaler weise[/COLOR] oder [COLOR="Red"]normaler weiße[/COLOR]), [COLOR="DarkGreen"]Standard[/COLOR] ([COLOR="Red"]Standart[/COLOR]), [COLOR="DarkGreen"]eben[/COLOR] ([COLOR="Red"]ebend[/COLOR])

                    Kommentar


                    • #25
                      Zitat von Asterixus Beitrag anzeigen
                      Ich kann da ApoY2k nicht zustimmen.
                      Wenn du Ereignisberechnungen durchführen willst, macht man sowas nicht mit Cronjobs. Dafür eignen sich Event-Dämonen viel besser - vor allem wenn du deine Spielideen mit die Stämme vergleichst.
                      In diesen Programmen führst du alle Events, die ausgeführt werden sollen, chronologisch aus. Ein Cronjob ist nur eventuell dann geignet, wenn ein Tick wirklich nur alle zehn Minuten ist. Aber in deinem Fall gehe ich davon aus, dass du sekündliche Eventberechnungen brauchst.

                      Ich kann zu MySQL seit den Versionen der letzten paar Monate nicht mehr raten. Bugs werden einfach nicht mehr behoben und ich denke, dass die Übernahme durch Oracle da nicht ganz unschuldig dran ist.

                      Daher rate ich dir wirklich an, entweder eine nicht relationale Datenbank wie MongoDB zu benutzen, oder dann eine andere relationale wie Oracle oder PGSQL (und wenn du PG benutzt, wirst du bestimmt 'nen neuen Freund in diesem Forum finden).
                      Unterschreibsel ich so, bis auf die Empfehlungen: https://foundationdb.com
                      [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                      Kommentar


                      • #26
                        Was ist das denn?

                        Kommentar


                        • #27
                          Eine Datenbank ( High-Performance SQL Layered Key-Value-Storage ).
                          [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                          Kommentar


                          • #28
                            Aber mehr für Maps als übliche "relationelle Dinge"?
                            [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

                            Kommentar


                            • #29
                              Zitat von Asterixus Beitrag anzeigen
                              Ich gehöre übrigens zum Entwicklerteam eines bald auf den Markt kommenden großen (leider ist nicht der Name groß, sondern die Software) Browsergames, daher habe ich schon einiges an Ahnung und kann sogar Tipps geben, die wir gerne gehabt hätten, als wir die Software designed haben ^^

                              Cron-Jobs eignen sich nur für Dinge, die ab und zu mal gemacht werden müssen. Wie du es genau rausgelesen hast, ist der Dämon der wichtigste Begriff =)
                              Den Dämonen kannst du übrigens auch in einer anderen Sprache schreiben; ich garantiere dir aber, dass wenn dein PHP-Code schon steht, wirst du das nicht mehr machen wollen, denn deine Klassen kannst du nicht einfach in Java wieder verwenden.

                              Und um auf etwas, was du gesagt hast, einzugehen: Dämonen sollten wirklich nur Events berechnen; dh. Aktionen, die stattfinden sollten, wenn keiner der betroffenen Benutzer eingeloggt ist.
                              Ich bin meine grundlegenden Verständnissprobleme glücklicherweise schon losgeworden und verstehe jetzt das Prinzip.
                              Leider fällt es mir sehr schwer Informationen zu der Benutzung von Dämonen zu finden. Hat hier vielleicht jemand einen Link parat, unter dem ich ein bisschen was dazu nachlesen kann, oder gar ein "Tutorial" in dem ein bisschen was zu solchen Dämonen erklärt wird. (am liebsten natürlich in deutsch, alternativ ist englisch aber auch kein großes Problem, ich freue mich da über alles)
                              Wenn ich das richtig verstehe kann der Dämon in allen Sprachen geschrieben sein, die Datein können also von ganz unterschiedlichem Typ sein. Wie bekomme ich sie dann dazu als Dämon zu laufen? Zum Beispiel bei Xampp? Alternativ auch eine andere Testumgebung falls das irgendwie leichter sein sollte.
                              An diesen Fragen scheiter ich aktuell leider noch.

                              Morgen hab ich nahezu frei und werd dann auch die Zeit haben mir mal die unterschiedlichen Vorschläge, die hier für die Datenbank gepostet zu werden durchzugehen. Danke soweit für die Ratsschläge.

                              Kommentar


                              • #30
                                Ein Daemon ist im Prinzip nur ein "kleines" Shell-Programm, dass die grundlegenden Aktionen bereitstellt. Am Besten googelst du nach "linux daemon".

                                Während der Entwicklung kannst du deinen PHP-Daemon auch von der Konsole starten und mittels & in den Hintergrund senden.
                                [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

                                Kommentar

                                Lädt...
                                X