Manfred K.: Seitenaufbau pausieren

hi, habe ein kleines browserspiel in perl gemacht und bei bestimmten tätigkeiten muss man immer eine zeit lang warten bis man mit der tätigkeit fertig ist. ich dachte mir ich baue einfach ein sleep(xx) ein und gebe dann erst den restlichen inhalt aus mit den informationen was der spieler bekommen hat und so weiter. auf der suche nach einem webspace erfuhr ich von vielen webspaceanbieter das eine sleep funktion verboten beziehungsweise ungern gesehen ist. dachte dann ich ersetze die sleep funktion mit javascript und pausiere dann den seitenaufbau. klappt zwar aber nicht wenn man javascript abgeschaltet hat und es wäre nicht sinnvoll wenn sich die spieler einfach das javascript abschalten und so schneller zum erfolg kommen.
was gibt es noch für möglichkeiten einen seitenaufbau zu pausieren den ein spieler schwer oder gar nicht umgehen kann? oder hat jemand eine andere idee wie ich mein problem lösen kann?

vielen dank und liebe grüsse

  1. Hi!

    Dein Problem wird gewoehnlich serverseitig gehandhabt, aber nicht indem der Seitenaufbau gestoppt wird. Wenn ein Spieler z.B. einen Bauauftrag ausgibt und der 5 Minuten dauert, dann wird normalerweise 5 Minuten lang eine Seite ausgeliefert die das Objekt als im Bau anzeigt. Mit Javascript aufgepeppt, aktiviert sich das Objekt nach 5 Minuten von allein.

    Du musst also Serverseitig vorhalten wann etwas gestartet wurde und wann der Vorgang abgeschlossen ist.

    --
    "Die Diebesgilde beklagte sich darueber, dass Mumm in aller Oeffentlichkeit behauptet hatte, hinter den meisten Diebstaehlen steckten Diebe."
          - T. Pratchett
  2. Hi,

    was gibt es noch für möglichkeiten einen seitenaufbau zu pausieren den ein spieler schwer oder gar nicht umgehen kann?

    Das ist der falsche Ansatz.

    oder hat jemand eine andere idee wie ich mein problem lösen kann?

    Speichere serverseitig, wann eine begonnene Tätigkeit endet.

    Aktualisiere ggf. clientseitig nach Ablauf dieser Zeitspanne die Seite, dann bekommt der Nutzer das Ende der Tätigkeit und ihre Ergebnisse angezeigt.

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
  3. Yerf!

    was gibt es noch für möglichkeiten einen seitenaufbau zu pausieren den ein spieler schwer oder gar nicht umgehen kann? oder hat jemand eine andere idee wie ich mein problem lösen kann?

    Ich würde das ganze zweistufig lösen. Wenn der Benutzer die Aktion startet bekommt er sofort eine Rückmeldung, dass die Aktion gestartet wurde und wann diese abgeschlossen sein wird. Serverseitig werden diese Daten ebenfalls vermerkt.

    Wenn der Benutzer die Seite nun neu abruft wird am Server geschaut, ob diese Aktion bereits abgeschlossen ist, wenn ja: Erfolgsmeldung, wenn nein: Meldung, das die Aktion noch läuft.

    Das Ganze kann man dann evtl. noch mit einem automatischen Refresh der Seite beim Benutzer kombinieren.

    Gruß,

    Harlequin

    --
    <!--[if lt IE 8]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
  4. Guten Tag,

    was gibt es noch für möglichkeiten einen seitenaufbau zu pausieren den ein
    spieler schwer oder gar nicht umgehen kann? oder hat jemand eine andere idee
    wie ich mein problem lösen kann?

    Das Problem beim Schlafen ist, dass der Prozess weiterläuft und mit dem sleep() blockiert wird. Ggf. kann das bedeuten, dass ein ganzer Fork des Webservers, wenn ein Modul verwendet wird, blockiert ist.

    So ein Spiel basiert üblicherweise auf Ticks. Ein Tick stellt eine bestimmte Zeiteinheit da, z.B. eine Minute. Ein Task im Spiel kostet dann, ggf. neben Ressourcen, eine gewisse Anzahl an Ticks. Intern wird abgespeichert, wann ein Task begonnen wurde. So kann zu jedem späteren Zeitpunkt berechnet werden, ob ein Task bereits abgeschlossen wurde oder wann er abgeschlossen sein wird.
    Der Benötigte-Anzahl-an-Ticks-Counter wird dann für jeden Task zum Ende eines jeden Ticks dekrementiert. Ist der Counter bei Null angelangt, ist ein Task abgeschlossen.

    Stürzt z.B. der Prozess ab, der für die Dekrementierung der Ticks sorgt, geht zumindest die vergangene Zeit nicht verloren. Früher waren solche Spiele häufig nicht sehr stabil.

    Gruß
    Christoph Jeschke

    --
    Zend Certified Engineer
    Certified Urchin Admin