kostenloser Webspace werbefrei: lima-city


Zeitgesteuerte Abläufe

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    e********l

    Hi, wer kennt sie nicht? Browser Games die nach Time X ein Event ausl?sen. Sch?n und gut und ja auch einfach mit Cron Jobs zu realisieren.

    Was mich aber in den Sinn kommt, wie l?sen die das bei einigen Spielen das man f?r jedes Objekt einen Timer hat und dann auch auf die Sekunde +- Abarbeitungszeit das Objekt zum bisherigen Bestand addiert wird.
    Ich kann mir nur schlecht vorstellen das f?r jeden dieser winzigen aufgaben ein extra Cron-Job gestartet wird. Allein aus der Design-Sicht halte ich das f?r unhaltbar.
    Allerdings w?rde das auch erkl?ren warum jene Games soviele Server ben?tigen.

    Denn wenn ich mir andere Spiele anschaue die zb. eine eigene Runtime haben -> JSP/Java Games, die ben?tigen nicht soviele Server, lediglich eine bessere Ausstattung der Servermachine, da sind dann f?r bestimmte Aufgaben einfach weitere Threads am laufen die st?ndig die ihnen ?bermittelten Werte mit der Zeit abgleichen.

    Frisst zwar auch Performance und Geld (Server) aber l?ngst nicht soviel wie bei der Cron Job L?sung.

    Was ist eure MEinung dazu?

    Bitte keine Einzeiler oder andere nichtsagende Kommentare, Danke!
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. die Countdowns werden auch nicht mit PHP oder anderen Serverseitigen Techniken gemacht, sondern mit JavaScript.

    JavaScript wird im Browserfenster ausgef?hrt und rechnet dann einfach den Countdown runter.
    Der Server bekommt gar nichts davon mit.
  4. Autor dieses Themas

    e********l

    JavaScript wird im Browserfenster ausgef?hrt und rechnet dann einfach den Countdown runter.
    Der Server bekommt gar nichts davon mit.


    Witzbold, das wei? ich auch. Aber der Counter tickert auch weiter wenn man nicht eingeloggt ist, und dann wird auch das Objekt zur Zeit X erzeugt.

    Also muss das schon irgendwie auf dem Server abhandelt werden. Und auch wenn man eingeloggt ist, zum Zeitpunkt X geschieht es -.-

    DAs geht nur mit Hintergrund ABl?ufen...w?sste jedenfalls nicht wie man das sonst realisieren sollte.
  5. t*****b

    Du kannst ja zB wenn ein Haus gebaut wird, das 5 Minuten zum Bauen dauert, die Zeit in eine Datenbank speichern (wann begonnen wird zu bauen). Bei jedem Reload ?berpr?fst du, ob die jetzige Zeit schon 5 Minuten sp?ter ist, wenn ja ist das Haus gebaut, wenn nich berechnest du kurz wie lange das Haus noch braucht (5Min-Vergangene Zeit) und gibst dies aus (bsp: Das Haus braucht noch x Minuten bis es fertig gebaut ist).

    So kannst du nat?rlich nicht nur bei H?usern machen, sondern bei allen Vorg?ngen, die Zeit in Anspruch nehmen.
  6. Autor dieses Themas

    e********l

    Ich wei? nicht ob es an meiner Ausdrucksweise liegt, aber irgendwie ist bei euren Scenarios der SPieler mmer eingeloggt.

    Nur das ganze soll/funktioniert auch wenn man nicht eingeloggt ist und zb. an Tag X 10 Objekte in Auftrag gegeben hat und an Tag Y sich dann wieder einloggt und dann hat man nat?rlich die Objekte.

    Nun hat aber an zwischen Tag X und Tag Y ein Angriff auf jenen Spieler stattgefunden und er hat von den 10 in AUftrag gegebenen Objekten 4 verloren.
    Dies geht aber nur wenn w?hrend der Offline Periode gew?hrleistet ist das diese objekte erstellt werden.

    Wie ich schon im Startpost schrieb ist das mit Java und anderen Thread basierenden Sprachen kein Problem und auch mit CronJobs die alle in bestimmten Abst?nden etwas ?berpr?fen. Ist bei Spielen die intern mit Ticks arbeiten nat?rlich m?glich. Aber ich hab auch schon WebGames mit PHP gesehen die dies in Echtzeit abliefen lassen.

    Und das kann aus meiner SIcht nur bedeuten das die echt f?r jeden kleinen Furzauftrag den der Spieler vergibt einen extra CronJob beim System starten.
    Das w?rde zb. erkl?ren warum Spiele wie InselMonarchie soviele Server haben. Bzw. f?r jedes laufende Game einen -.-

    Andererseits ist bei besagten Spiel aber auch die Anzahl der EIheiten im Verh?ltnis zu anderen Spielen sehr gering. Wenn man die Statistiken anschaut und man f?r alle SPiele gerade mal 1M Einheiten zu verzeichnen hat ist das echt gering.

    Kennt jemand Hyperiums, nein? In Phase 2 waren dort teilweise auf das gesammte SPieluniversum weningstens eine Milliarde an Einheiten verf?gbar. Entsprechend langsam war es auch zu kriegszeiten auf dem server. Lag aber auch mit an den restlichen 8000 spielern ;)

    Und selbst vorher als wir nur ~3000/4000 Spieler waren, war die EIheiten zahl entsprechend hoch.

    Ich frage also nochmal, wie zum Henker soll man das bei PHP ordentlich implementieren, es bietet ja keine Hintergrundthread au?er CronJobs. Und die kosten den Server doch auch Performance, oder sind die so gering das man getrost, sagen wir mal, 100.000 CronJobs paralell laufen lassen kann?
  7. hannover-liga

    hannover-liga hat kostenlosen Webspace.

    Lies dir die von trueweb beschriebene L?sungsm?glichkeit noch einmal richtig durch. Er hat dir bereits die richtige Antwort geliefert. Bei seinem Vorschlag muss niemand eingeloggt sein (nach Erstellung des Auftrages jedenfalls nicht).
    In Echtzeit l?uft bei den Browsergames gar nichts ab, das ist nur eine T?uschung. Die Daten werden halt immer nur ausgewertet, wenn eine Interaktion zwischen Server und Spieler stattfindet.
    Um dir das einfacher vorzustellen, solltest du mal ?berlegen, wie du das implementieren w?rdest. Falls dir ein Aspekt einf?llt, von dem du glaubst, dass er sich nur mit Hilfe eines cronjobs oder ?hnlichem erledigen l?sst, dann poste das hier. Wirst schnell das Gegenteil bewiesen bekommen.
  8. Autor dieses Themas

    e********l

    Das auf die Art und wei?e geht ist mir klar. Aber hat auch schonmal jemand an den dadurch entstehenden Flaschenhals gedacht?

    Je mehr Spieler ein SPiel hat, umso wahrscheinlicher ist es das ein Request zur "fast" selben Zeit stattfindet. Dadurch w?rde bei er obigen Methode eine unn?tige Last entstehen.

    Wie gesagt, ich w?rde das ganze auf Ticks aufbauen, wobei ich mir nicht ganz sicher bin wie ich die innertickzeitlichen differenzen behandeln w?rde.

    An sich ist das ein interessantes Thema. Denn das Wie ist im Grunde genommen das weniger wichtige. Eher das Wie und Wann + Performance ist interessant.

    Viele Entwickler ?berlegen sich die dollsten Dinger und wundern sich dann warum denn alles so langsam abl?uft sobald die User Anzahl ein bestimmtes Limit erreicht hat.

    Und bei Java halt mit Threads, wobei das nat?rlich die Ideal L?sung bietet, denn ein Thread l?uft solange wie man ihn nicht beendet oder pausiert. EIn CronJob l?uft soviel ich wei? immer nur in Intervallen oder zu einem fest gesetzen Zeitpunkt.
  9. hannover-liga

    hannover-liga hat kostenlosen Webspace.

    evil-devil schrieb:
    Das auf die Art und wei?e geht ist mir klar. Aber hat auch schonmal jemand an den dadurch entstehenden Flaschenhals gedacht?

    Je mehr Spieler ein SPiel hat, umso wahrscheinlicher ist es das ein Request zur 'fast' selben Zeit stattfindet. Dadurch w?rde bei er obigen Methode eine unn?tige Last entstehen.

    Um konkurrierende Zugriffe brauchst du dich als Programmierer nicht zu k?mmern, wenn du ein ausgereiftes Datenbanksystem benutzt. Dadurch entsteht nicht mehr Last. Ausserdem sind diese Spiele alle so aufgebaut, dass man vielleicht 2 oder 3 Dutzend Aktionen gleichzeitg ausf?hren kann. Diese dauern aber alle jeweils einige Stunden (sagen wir mal 4). W?re 4 x 36 x Anzahl der User. Also nicht schlimmer als die Communiy hier (wo immer mehr als 100 User gleichzeitig online sind).
  10. Autor dieses Themas

    e********l

    (wo immer mehr als 100 User gleichzeitig online sind).


    Ja, schon richtig, allerdings ist im extremfall (schon erlebt bei hyperiums) viel mehr los. Wie gesagt, wir waren max 8000 Benutzer, und von diesen 8000 waren mindestens immer 3000-5000 benutzer "Zeitgleich" auf dem Server eingeloggt und auch aktiv. Ein Seitenaufruf hat dann, obwohl es fast keine grafiken gab, einige Minuten gedauert oder es kam gleich ein TimeOut.

    Die eleganteste L?sung ist sicher mit CJs, aber ich hab halt keine Ahnung wieviel Perfo die fressen. VOn anderen Websprachen und auch aus JAVA wei? ich das sehr viele Threads bzw Jobs irgendwann Perfo ziehen.

    @gutes DBs System: Das schlie?t MySQL in der aktuellen Version dann leider aus. Im Vergleich zu Oracle und MS SQL ist MySQL echt lahm bei vielen Zugriffen. Kennst du das GamesWeb Forum? Die sind schon seit Jahren nur noch lahm ^^ Da ist aber auch deren DB schon sehr gut gef?llt bzw die Software des Forums so grottig ;)

    Nichts desto trotz interessieren mich eure Ansatz Ideen.

    Ich geb mal folgendes Scenario vor.

    Server:
    1 Webserver, 2 SQL Server, 2 Game Runtime Server (bei einsatz von JAVA)
    ~4000 Spieler, ~1500 dauer aktiv (24/7)
    - st?ndliche Geldauszahlung
    - alle 2 stunden laufen Gefechte ab, in abh?ngigkeit von deren Startzeit. also asynchron.
    - flotten k?nnen ebenso asynchron verschickt werden
    - pro Spieler min. 10.000 Einheiten
    - top 10 SPieler min. 1.00.000 Einheiten
    - top 100 Spieler min. 100.000 Einheiten

    Ich glaub das reicht als Rahmenbedingung
    Ich bitte um kreative Ideen.
    Im Grunde hab ich nur die abstrakten Anforderungen von Hyperiums dargelegt. Mittlerweile d?rfte deren Serverfarm auch gr??er sein.
    OT: bin nun offline und erst MOntag wieder im Netz
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!