Micha: Keep-Alieve: Frage für CGI-Checker

Hi!

Wenn ich folgendes Programm direkt mit dem Perl-Interpreter Aufrufe, wird eine Zahl nach der Anderen mit jeweils einer Sekunde Abstand ausgegeben - logo! Wenn ich das Ganze vom Browser aus aufrufe, dauert es erst einmal 10 Sekunden und dann wird alles auf einmal ausgegeben und die Verbindug zum Server wieder getrennt.

#!/usr/bin/perl
print "Content-type: text/html\n\n";
for ($i=1;$i<=10;$i++)
  {print "$i "; sleep 1;}

Was muß ich machen damit die Zahlen ebenfalls nach und nach ausgegeben werden (so wie z.B. bei einem PushChat [wo nicht alles einem ständigen Refresh unterzogen wird] - wo ja auch die Nachrichten Schritt für Schritt ausgegeben werden müssen.)
Für Tips wäre ich seeeehr dankbar!

Cu
Micha

P.S.:Wo bekomme ich ein fertiges Chat-Skript her. (Refresh-Skripte gibt es ja viele im Internet zum Downloaden, ein Push-Skript habe ich bis jetzt noch nicht entdeckt!)

  1. P.S.:Wo bekomme ich ein fertiges Chat-Skript her. (Refresh-Skripte gibt es ja viele im Internet zum Downloaden, ein Push-Skript habe ich bis jetzt noch nicht entdeckt!)

    Cassiopia :)

    Nein im Ernst, es gibt nicht sehr viele dieser CGI "real" time Skripts... kannst du dir in etwa vorstellen wie hoch die Rechnerbelastung ist?

    Einfache Rechnung xUser X yZeilen = Output

    jede zeile die jemand schreibt wird an alle User geschickt!! (von der Netzwerkbelastung red ich jetz gar nicht) ein guter bekannter von mir hat selbst mal so was geschrieben. aber bei einem testlauf mit 3 Leuten ist sein rechner demassen in die knie gegangen. das der PRozessor überhitzte :)))) und sich abschaltete... man muß aber dazu sagen das daß skript noch nicht optimiert war, und sicher in der einen oder anderen funktion starke Systemhandbremsen waren.

    Cu
    Rufinus

  2. Hallo Micha!

    2 Vorschläge:

    1. Es gibt das ein Konzept von Netscape das
      Server-Push genannt wird. Dabei bleibt die
      Verbindung zwischen Browser und Server offen. Ich glaubt mit diesem Konzept währe dein Problem zu lösen. Ich glaube aber auch, daß das nur mit ApacheServern funktioniert.

    2. Versuche mal, das Buffern in Perl abzuschalten
         $ = 0; (Der Strich = das komische Zeichen
                  zwischen Schift und Y)

    Bin mir aber nicht sicher - Falls du es versuchst:
       Sag mir bitte beschei ob es funktioniert oder nicht.

    Grüße und frohe Ostern
      Fredy

      1. Versuche mal, das Buffern in Perl abzuschalten

      »»    $ = 0; (Der Strich = das komische Zeichen
      »»             zwischen Schift und Y)

      »»    Bin mir aber nicht sicher - Falls du es versuchst:
      »»    Sag mir bitte beschei ob es funktioniert oder nicht.

      Ich habs noch nicht ausprobiert, aber das muß glaube ich = 1 heißen. Dazu mußt du noch ein <br> oder so ausgeben, da sonst die Sache übertragen wird, aber der Browser sie nicht anzeigt, weil die Zeile noch nicht fertig ist. Dann muß der Apache das auch noch unterstützen (und der Perlinterpreter glaube ich auch). Aber ich habe es schon mal geschaft.

      1. Hallo!
        Noch eine Anmerkung: Auf Apache-Servern sollte noch ein "nph-" vor dem Dateinamen stehen also z.B. nph-test.pl
        (Ab Apache 1.3.0. ist aber auch das nicht mehr nötig soviel ich weiß)
        Außerdem sollte man nicht nur darauf achten, die Zeile, sondern auch Tabellen, abzuschließen.
        Viele Grüße und frohe Ostern,
        Alexander

      2. Hey, super, das mit $=0 funktioniert!!!

        Danke an alle
        Cu
        Micha

  3. Wie siehts damit aus, nach jeder Zahl wieder dies hier auszugeben?:
    "Content-Type: text/html\n\n"
    Kann aber sein, daß dann als aller erstes irgendwas von wegen
    content-type multiple mime oder so stehen muß.

    CYa
    G.