Hodi: Fortschrittsbalken PHP Multipart

Hallo, ich habe ein Verständnisproblem:

User @Fastix hat vor einiger Zeit dieses tolle Beispiel für einen PHP-Ladebalken gebracht. Ich verstehe erstens nicht genau, wie das funktioniert, und zweitens, warum ich in meinem LiveHTTP-Headers nur eine Response sehe (bzw. 2, eine noch für das favicon).

Wie weit könnte man das treiben, bzw. wie lange könnte sowas durchlaufen? Stunden? Tage? Könnte man damit z.b. eine einfache Art von Game of Life umsetzen?

Oder den User mit ständigen Push-Inhalten nerven? Ich habe diese Art der Umsetzung so noch nicht in der freien Wildbahn erlebt. Klärt mich auf, wozu kann man das brauchen?

HODI

  1. Hi!

    User @Fastix hat vor einiger Zeit dieses tolle Beispiel für einen PHP-Ladebalken gebracht. Ich verstehe erstens nicht genau, wie das funktioniert, und zweitens, warum ich in meinem LiveHTTP-Headers nur eine Response sehe (bzw. 2, eine noch für das favicon).

    Siehst du den Content-Type-Header, der da als erstes gesendet wird? Siehst du die Schleife, die durch "--endofsection" abgegrenzt, hintereinander weg HTML-Dokumente sendet?

    Wie weit könnte man das treiben, bzw. wie lange könnte sowas durchlaufen?

    Funktioniert zum Beispiel nicht wie vorgesehen mit dem IE8 und mit Google Chrome 6.0. Der erste stellt alle Dokumente untereinander dar, der zweite wartet auf das letzte. Also lautet die Antwort: Mit Sicherheit gar nicht. ("Sicher" in dem Sinn, dass es überall problemlos funktioniert.

    Oder den User mit ständigen Push-Inhalten nerven? Ich habe diese Art der Umsetzung so noch nicht in der freien Wildbahn erlebt.

    Geht auch nicht, weil du vom Server aus nicht durch NATs und Proxys in Richtung User durchkommst. Die Verbindung muss vom User aus erfolgen, wenn es einigermaßen funktionieren soll, denn so geht das ja tagtäglich. Man kann aber vom User aus einen Request abschicken, den der Server einfach offen lässt und gelegentlich mit Inhalt versorgt. Wenn der Browser wegen Timeout abbricht, muss (mit Javascript) dafür gesorgt werden, dass der mit einem neuen Request die Verbindung wieder aufbaut.

    Lo!

    1. Funktioniert zum Beispiel nicht wie vorgesehen mit dem IE8 und mit Google Chrome 6.0. Der erste stellt alle Dokumente untereinander dar, der zweite wartet auf das letzte. Also lautet die Antwort: Mit Sicherheit gar nicht. ("Sicher" in dem Sinn, dass es überall problemlos funktioniert.

      Opera 10.6x tut z.B. "garnichts".

    2. Hi,

      Siehst du den Content-Type-Header, der da als erstes gesendet wird? Siehst du die Schleife, die durch "--endofsection" abgegrenzt, hintereinander weg HTML-Dokumente sendet?

      Jop! Aber warum wird das als *eine* Response gehandelt und nicht mehrere? Weil nur einmal ein Header gesendet wird?

      Wie weit könnte man das treiben, bzw. wie lange könnte sowas durchlaufen?

      Funktioniert zum Beispiel nicht wie vorgesehen mit dem IE8 und mit Google Chrome 6.0. Der erste stellt alle Dokumente untereinander dar, der zweite wartet auf das letzte. Also lautet die Antwort: Mit Sicherheit gar nicht. ("Sicher" in dem Sinn, dass es überall problemlos funktioniert.

      ah, ok. Habs nur mit Firefox getestet. Und da es eine serverseitige Sache ist, dachte ich, das sollte ja dann überall gleich aussehen.

      Oder den User mit ständigen Push-Inhalten nerven? Ich habe diese Art der Umsetzung so noch nicht in der freien Wildbahn erlebt.

      [..] Die Verbindung muss vom User aus erfolgen, wenn es einigermaßen funktionieren soll, denn so geht das ja tagtäglich. Man kann aber vom User aus einen Request abschicken, den der Server einfach offen lässt und gelegentlich mit Inhalt versorgt. [..]»»

      Ja, das meinte ich schon. Also nicht, dass man irgendwelche Rechner ansteuert, sondern User A ruft Website B auf, die dieses Verhalten zeigt. Wenn's nicht überall funktioniert, ist es sowieso relativ wertlos...

      Hodi

      1. Hi!

        Siehst du den Content-Type-Header, der da als erstes gesendet wird? Siehst du die Schleife, die durch "--endofsection" abgegrenzt, hintereinander weg HTML-Dokumente sendet?
        Jop! Aber warum wird das als *eine* Response gehandelt und nicht mehrere? Weil nur einmal ein Header gesendet wird?

        "multipart" ist das Stichwort. Die eine Antwort besteht aus mehreren Teilen.

        Funktioniert zum Beispiel nicht wie vorgesehen mit dem IE8 und mit Google Chrome 6.0. Der erste stellt alle Dokumente untereinander dar, der zweite wartet auf das letzte. Also lautet die Antwort: Mit Sicherheit gar nicht. ("Sicher" in dem Sinn, dass es überall problemlos funktioniert.
        ah, ok. Habs nur mit Firefox getestet. Und da es eine serverseitige Sache ist, dachte ich, das sollte ja dann überall gleich aussehen.

        Nee, kann nicht zwangsläufig, denn die Browser müssen das ja auch verstehen. Und da gibts offensichtlich Interpretationsunterschiede.

        Ja, das meinte ich schon. Also nicht, dass man irgendwelche Rechner ansteuert, sondern User A ruft Website B auf, die dieses Verhalten zeigt. Wenn's nicht überall funktioniert, ist es sowieso relativ wertlos...

        Zumindest die "fastix-Methode" funktioniert nicht überall. Mit XHR/Ajax eine Verbindung im Hintergrund laufen zu lassen sollte eher funktionieren.

        Lo!

        1. Tach auch.

          Mit XHR/Ajax eine Verbindung im Hintergrund laufen zu lassen sollte eher funktionieren.

          Nur für die weitere Suche werfe ich hier mal das Stichwort Comet ein.

          Bis die Tage,
          Matti

  2. Hi,

    Wie weit könnte man das treiben, bzw. wie lange könnte sowas durchlaufen? Stunden? Tage? Könnte man damit z.b. eine einfache Art von Game of Life umsetzen?

    Eher nicht. Du musst bedenken, dass mit jedem Client, den du dir „online“ hältst, auch ein Prozess/Thread auf deinem Server am laufen bleiben muss, was der Performance schon mal nicht sonderlich gut tun dürfte, und auch ein Port besetzt bleibt, so dass diese dir auch recht schnell ausgehen werden (auf einem eigenen Server vielleicht nicht so schnell, in einer shared hosting-Umgebung aber schon eher).

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?