Home

Benchmarks
Historie
Forum
Download
Helpware
Insider
Dokumentation
Kurs
Provider-Infos

Impressum



tdbengine news vom 6.7.2000

Grundsätzliche CGI-Frage: Was passiert, wenn der Browser die Anforderung abbricht?

Gemeinsam mit anderen CGI-Programmierern schwitzen wir gerade über einem Problem: Was passiert mit einem CGI-Programm, wenn der Klient in seinem Browser während des Aufbaus einer (vom CGI-Prgramm gelieferten Seite) die Stop-Taste drückt (relativ selten) oder bereits einen weiteren Link aktiviert (kommt sehr häufig vor)? In beiden Fällen wird vom Browser die aktuelle Verbindung (einseitig) aufgelöst. Was passiert mit dem gerade laufenden CGI-Programm?

Hier scheint es je nach Betriebssystem/http-Server-Kombination die unterschiedlichsten Verhaltensweisen zu geben. Ganz offensichtlich reagieren die http-Server auf dieses Problem grundsätzlich erst, wenn das CGI-Programm etwas an den Klienten senden will (solange überwachen sie den CGI-Prozess nur bezüglich Zeitüberschreitung). Ist die Verbindung nicht mehr vorhanden (eben weil inzwischen Stop gedrückt wurde), gibt es zwei grundsätzlich verschiedene Reaktionen:

  • Das CGI-Programm wird vom http-Server beendet.
  • Das CGI-Programm wird nicht beendet, aber die Ausgabeanweisung führt zu einem (IO-)Fehler.
Beide Fälle sind recht ungut. Der (auf den ersten Blick) etwas günstigere Fall, dass das CGI-Programm nicht beendet wird, erweist sich bei näherem Hinsehen als noch gemeiner: Wenn das CGI-Programm nicht nach jeder Ausgabe den IO-Status testet, bekommt es den Abbruch nicht mit und meint trügerischerweise, dass alles in Ordnung sei.

Was die ganze Angelegenheit noch gemeiner macht (jaja, es gibt immer noch eine Steigerung) ist, dass alle guten CGI-Programme (wie perl, tdbengine ...) die Ausgabe puffern, um eine möglichst hohe Performance zu erreichen. So kann der IO-Fehler (bzw. Programmabruch) beispielsweise erst ganz am Ende des Programms auftreten, wenn nämlich der Puffer an den Klienten übertragen wird. Dieser Zeitpunkt liegt gewöhnlicherweise noch hinter dem Ende der Prozedur Main und entzieht sich damit komplett der Kontrolle des CGI-Programmierers.

Die (vorläufige) Lehren aus dieser Problematik lauten:

  • Das CGI-Programm bekommt es normalerweise nicht mit, ob und wann es vom Anwender abgebrochen wird.
  • Das CGI-Programm sollte nur an unkritischen Stellen CGI-Ausgaben machen (also keinesfalls innerhalb einer Transaktion)!
  • Das CGI-Programm sollte immer so schnell sein, dass während seiner Laufzeit kein Anwender den Stop-Knopf drücken kann.

Portierung der tdbengine auf andere Plattformen

Der Bedarf an einem schneller CGI-Interpreter mit direktem Datenbankanschluss ist sehr gross. Deshalb haben wir bei der Portierung auf andere Plattformen große Pläne:
  • Linux für Alpha  (4. Quartal 2000)
  • Linux Sun/Sparc (1. Quartal 2001)
  • Solaris Sun/Sparc (2. Quartal 2001)
Weitere Plattformen werden folgen.

Bei der Portierung geht es nicht nur darum, das System "irgendwie" zum Laufen zu bekommen, sondern sie vor allem in Bezug auf Performance auf jeder Plattform zu optimieren.


Version 6.2.4 für Linux und Win32

Bereits in den nächsten Wochen wird es wieder eine neue Version der tdbengine geben. Die neuen Features und Verbesserungen werden in einer eigenen News vorgestellt werden.

Newsletter

Anmeldung zum Newsletter:
Name: 
Zusatz: 
EMail: