xastax: Warteschleife / Synchronisation

Hallo Zusammen,

ich habe folgendes Problem:
Ich möchte mehrere Benutzer gleichzeitig auf eine Website lassen. Nach einer Anmeldung landen alle Benutzer auf einer "Warteseite". Nach dem alle erforderlichen Benutzer da sind, wird die erforderliche Seite geladen.
Momentan nutze ich für alles PHP5 und Mysql4.
Die "Warteseite" müsste also so lange prüfen ob alle Benutzer da sind (12), bevor es die Seite läd. Ein refresh der Seite ist nicht wünschenswert, da eine Flash slideshow und Musik abgespielt werden.

Nun zu meiner Frage:
Wie kann ich das am saubersten realisieren?
Mir schwebt da eine while schleife vor, die Seite sollte aber schon ausgeführt werden. Da stehe ich irgendwie auf dem Schlauch.

Danke
mfg
xastax

  1. Nun zu meiner Frage:
    Wie kann ich das am saubersten realisieren?
    Mir schwebt da eine while schleife vor, die Seite sollte aber schon ausgeführt werden. Da stehe ich irgendwie auf dem Schlauch.

    Auch wenn es andere Möglichkeiten gibt, beispielsweise das überprüfen mittels JavaScript, ist deine Idee vom Prinzip her gut, da sie ohne JavaScript auskommen würde.

    Die Idee wäre, du lässt dein Script erst einmal die Warteseite ausgeben, ohne schließende body und html Tags. Nach dieser Ausgabe stellst du mittels flush() sicher, dass alle Daten aus dem Ausgabepuffer von PHP an den Browser geschickt wurden. Jeder Browser sollte jetzt die Seite anzeigen, auch wenn sie noch nicht vollständig ist.
    Dein Script geht nun in die Warteschleife, sendet dabei aber möglichst alle paar Sekunden ein Leerzeichen oder einen Zeilenumbruch (mit flush() erzwingen) damit der Browser die Verbindung nicht trennt.
    Wenn deine Wartebedingung erfüllt ist, gibst du einen Link zur nächsten Seite (für Leute ohne JS), sowie ein JavaScript für eine automatische Weiterleitung aus, dann beendest du dein Script.

    Vergisst nicht, mit set_time_limit() die maximale Ausführungszeit deines Skripts zu verlängern.

    Du solltest ausserdem eine Behandlung für den Fall einbauen, dass mehr als X Personen diese URL aufrufen, denn dein Skript erzeugt sonst zuviele parallel gestartete Prozesse.

    Danke
    mfg
    xastax

    Gruß,
    Andreas

    1. Hi,

      Wenn deine Wartebedingung erfüllt ist, gibst du einen Link zur nächsten Seite (für Leute ohne JS), sowie ein JavaScript für eine automatische Weiterleitung aus, dann beendest du dein Script.

      In dem Fall erscheint mir regelmaessiges "Pollen" per JavaScript (AJAX) aber noch die performatere Methode zu sein.

      Wenn's ohne JS sein soll, dann meinetwegen auch einen kleinen Iframe, der sich regelmaessig refresht und dann letztendlich den Link ausgibt.

      Btw: Bei regelmaessiger Benutzung muss natuerlich irgendwie sichergestellt werden, dass dieser Link, wenn einmal bekannt, trotzdem etwas anderes liefert, wenn er "vorher" aufgerufen wird.

      MfG ChrisB

      1. Hi,

        Wenn's ohne JS sein soll, dann meinetwegen auch einen kleinen Iframe, der sich regelmaessig refresht und dann letztendlich den Link ausgibt.

        Allen vielen Dank für die Tipps! Ich habe es jetzt mit einem Iframe gelöst, der eine if-Abfrage alle 15 sek durch refresh ausführt. Hatte für mich die meisten Vorteile.

        Btw: Bei regelmaessiger Benutzung muss natuerlich irgendwie sichergestellt werden, dass dieser Link, wenn einmal bekannt, trotzdem etwas anderes liefert, wenn er "vorher" aufgerufen wird.

        Daran hatte ich noch nicht gedacht! Danke!
        Das Problem tritt aber garnicht erst auf, da diese Seite nur mit entsprechenden login und db Einträgen angezeigt wird. Und diese sind standardmässig aus.
        Werde ich aber für andere Bereiche berücksichtigen.

        mfg
        xastax

        1. Hallo,

          jetzt habe ich ein weiteres Problem! Ich nutze einen JS Countdown der nach ablauf ein PopUp aufruft. Wenn der Benutzer jetzt allerdings F5 drückt, fängt der Countdown natürlich wieder von vorne an.
          Wie kann ich es realisieren das der Countdown korrekt weiterläuft auch wenn der Benutzer einen refresh macht?
          Ich habe es schon mit $_session[] versucht. Dies funktoniert aber nur bei ersten versuch, nach dem ersten refresh, ist der Countdown nicht da.

          mfg
          xastax