Thread Nach Ausgabe von CGI - foo ausführen (23 answers)
Opened by Gustl at 2020-03-25 12:37

haj
 2020-03-25 19:02
#191630 #191630
User since
2015-01-07
531 Artikel
BenutzerIn

user image
Da gibt es einige Ansätze, je nachdem, was Du genau erreichen willst.

Ich nehme mal an, dass es sich um eine HTML-Antwort handelt und dass nach dem Ausführen der Subroutine diese Antwort noch einmal ergänzt werden soll. In dem Fall zeigt sich auch schon, warum ein einfaches sleep 5; nicht reicht: Eine HTML-Seite ist ein geschlossenes Gebilde, das mit </html> endet. Wenn der Browser das sieht, dann kann er die Seite aufbauen. Aber was danach auf STDOUT kommt, wird nicht mehr sichtbar.

Folgende Möglichkeiten fallen mir dazu ein:
  • Content-type=multipart/mixed - das gibt's schon lange. Dabei besteht die HTTP-Response aus mehreren kompletten Einheiten, die einander im Browser ersetzen. Das ist die einzige Variante, die mit einem Request an den Server auskommt. In den anderen drei Varianten gibt es immer zwei Requests, und auch zwei Antworten für den "schnellen" und den "langsamen" Teil.
  • HTML-Frames: Hier baust Du die Webseite aus mehreren Frames auf, die jeweils eigene URLs haben. Einer der Frames liefert sofort eine Antwort, der andere Frame sammelt die Antwort des Unterprogramms ein.
  • AJAX, oder meistens einfacher, AHAH (Asynchronous HTML over HTTP): Hier enthält Deine HTML-Seite einen JavaScript-Aufruf, die das langdauernde Ergebnis einsammelt. AHAH arbeitet nicht mit JSON, sondern mit HTML-Fragmenten. Diese können dann, anders als bei den anderen beiden Varianten, mit der Element-Eigenschaft innerHTML direkt in Deine HTML-Seite "eingebaut" werden. Der Server liefert hier also keine komplette HTML-Seite, sondern nur ein <div>...</div> oder anderes HTML-Konstrukt, das eben an diese Stelle passt.
  • Wikipedia:WebSocket ist ein jüngeres Kind der Entwicklung, bei dem Server und Browser sich in beide Richtungen unterhalten können. Da kann der Server sich dann beim Browser "melden", wenn er fertig ist, auch ohne dazu aufgefordert zu werden.


Man kann das alles zu Fuß programmieren, und "CGI" klingt auch ein bisschen nach einer älteren Anwendung. Viele aktuelle Web-Frameworks bieten dafür schon Unterstützung an.

View full thread Nach Ausgabe von CGI - foo ausführen