Andreas Bierhals: CGI's mit Zwischenergebnissen

Hallo liebe HTML‚ler!

Ich versuche gerade, eine aufwendigere Rechnung auf einem schnelleren
aber leider nicht immer direkt zugänglichen Rechner als CGI laufen zu lassen.
Die Rechnung benötigt mindestens ca. 10-15 Minuten Zeit. Um ein gewisses Feedback
zu bekommen, gebe ich am Anfang in einer Tabelle in einem Formular namens "monitor"
die Startparameter in Textfeldern aus. Nach jeder Zwischen-Iteration
(im Abstand von ca. 30 Sekunden) soll diese Tabelle aktualisiert werden.
Dies geschieht durch Ausgabe von folgenden Zeilen aus dem Skript:

<script language="JavaScript">
  document.monitor.iteration.value = "4";
  document.monitor.chisquare.value = "4.37412e+007";
  document.monitor.na.value = "0.492118";
  document.monitor.d_ox.value = "111.197";
  // usw...
</script>

Was passiert nun? War ja klar: Die ganze Sache schläft 15 Minuten vor sich hin, danach
werden am Ende alle diese Skript-Blöcke in einem Rutsch übertragen.
Sieht zwar ganz lustig aus, wie die Tabelle am Ende in Zeitraffer
aktualisiert wird, aber ich habe sowas schon mal anders gesehen.
Z.B. werden bei Suchmaschinen wie       http://meta.rrzn.uni-hannover.de
auch schon während der Suche Zwischenergebnisse ausgegeben die Netscape dann
auch schon mal anzeigt.

Momentan läuft das Ganze auf Win-NT und Xitami-Webserver, was aber nicht
unbedingt zwingend ist. Gibt es da irgendwelche Tricks?
Ich vermute vor allem, daß man irgendeine Zusatzangabe im CGI-Header
machen muß, damit der Server die Ausgabe gleich weiterleitet, ohne daß das Skript
schon beendet ist.

Bin für jeden Tip dankbar!

Viele Grüße!

Andreas Bierhals

  1. Hi,

    ich kann Dir leider auch keine definitive Antwort geben, nur einen vagen Hinweis:

    Benenne die Script-Datei mal in nph-irgendwas.pl um! Ich glaube, daß ein (entsprechend konfigurierter?) Server die Daten dann schon während der Berechnung liefert. Vielleicht weiß ja jemand anders mehr?

    Cheatah

    1. Hallo Cheatah,
      Das mit den nph- Scripts stimmt und funktioniert nur auf Apache-servern. Ab Version 1.3.? braucht man das nph- vor dem Dateinamen aber nicht mehr. Ich weiß nur soviel mehr dazu, dass man alles in den stdout schreiben muß und diesen dann ab und zu flushen(?) muß. Das sollte mit dem Perl-Befehl $| = 1; funktionieren. Meine bisherigen Experiment haben aber nicht den gewünschten Erfolg geliefert. Mich würde es sehr freuen, wenn jemand noch ein bißchen mehr dazu wüßte.
      Viele Grüße,
      Alexander

      PS: Das Ganze soll auch auf Servern funktionieren, die unbuffered CGI-Output erlauben (z.B. Sambar)

      1. Hallo Cheatah,
        Das mit den nph- Scripts stimmt und funktioniert nur auf Apache-servern. Ab Version 1.3.? braucht man das nph- vor dem Dateinamen aber nicht mehr. Ich weiß nur soviel mehr dazu, dass man alles in den stdout schreiben muß und diesen dann ab und zu flushen(?) muß. Das sollte mit dem Perl-Befehl $| = 1; funktionieren. Meine bisherigen Experiment haben aber nicht den gewünschten Erfolg geliefert. Mich würde es sehr freuen, wenn jemand noch ein bißchen mehr dazu wüßte.

        Also mit dem Befehl geht das bei mir (Apache / Linux). Nur muß nach der Textausgabe noch ein "<br>" kommen, damit der Text dargestellt wird. Auch eine Tabelle muß vorher beendet werden.