FastCGI: Unterschied zwischen den Versionen

Aus Foxwiki
K Textersetzung - „Kurzbeschreibung“ durch „Beschreibung“
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''topic''' - Kurzbeschreibung
'''FastCGI''' - Beschreibung
 
== Beschreibung ==
== Beschreibung ==
 
'''FastCGI''' ist ein binäres [[Netzwerkprotokoll]] für die Anbindung eines [[Anwendungsserver]]s an einen [[Webserver]].  
'''FastCGI''' ist ein binäres [[Netzwerkprotokoll]] für die Anbindung eines [[Anwendungsserver]]s an einen [[Webserver]]. FastCGI ist vergleichbar mit dem [[Common Gateway Interface]] (CGI), wurde jedoch entwickelt, um dessen [[Rechenleistung|Performance]]-Probleme zu umgehen.
* FastCGI ist vergleichbar mit dem [[Common Gateway Interface]] (CGI), wurde jedoch entwickelt, um dessen [[Rechenleistung|Performance]]-Probleme zu umgehen.


== Unterschied zum CGI ==
== Unterschied zum CGI ==
Beim Aufruf einer auf CGI basierenden [[Webseite]] wird vom Webserver ein [[Prozess (Informatik)|Prozess]] des CGI-Programms gestartet und am Ende des [[Client-Server-Modell#Definitionen|Requests]] wieder beendet. Weil CGI-Programme häufig in einer [[Skriptsprache]] wie [[Perl (Programmiersprache)|Perl]] geschrieben sind, bedeutet das, dass pro [[Seitenabruf]] der oft recht umfangreiche [[Interpreter]] geladen werden muss, was einen großen [[Overhead (EDV)|Overhead]] bedeutet (das Laden des Interpreters dauert bei einfachen CGI-Programmen länger als die eigentliche Programmausführung). Zudem braucht jeder Request einen eigenen Interpreter, das heißt, bei mehreren parallelen Requests befinden sich entsprechend mehrere Kopien des Interpreters im [[Arbeitsspeicher]] des Servers.
Beim Aufruf einer auf CGI basierenden [[Webseite]] wird vom Webserver ein [[Prozess (Informatik)|Prozess]] des CGI-Programms gestartet und am Ende des [[Client-Server-Modell#Definitionen|Requests]] wieder beendet.  
* Weil CGI-Programme häufig in einer [[Skriptsprache]] wie [[Perl (Programmiersprache)|Perl]] geschrieben sind, bedeutet das, dass pro [[Seitenabruf]] der oft recht umfangreiche [[Interpreter]] geladen werden muss, was einen großen [[Overhead (EDV)|Overhead]] bedeutet (das Laden des Interpreters dauert bei einfachen CGI-Programmen länger als die eigentliche Programmausführung).  
* Zudem braucht jeder Request einen eigenen Interpreter, das heißt, bei mehreren parallelen Requests befinden sich entsprechend mehrere Kopien des Interpreters im [[Arbeitsspeicher]] des Servers.


CGI ist zwar durch seine Einfachheit, Unabhängigkeit von der Programmiersprache und weitreichende Unterstützung durch praktisch alle Webserver sehr weit verbreitet, jedoch führt der erwähnte Overhead zu einer hohen [[Verzögerung (Telekommunikation)|Latenzzeit]] und bei stark ausgelasteten Servern schnell zu einer Überlastung.
CGI ist zwar durch seine Einfachheit, Unabhängigkeit von der Programmiersprache und weitreichende Unterstützung durch praktisch alle Webserver sehr weit verbreitet, jedoch führt der erwähnte Overhead zu einer hohen [[Verzögerung (Telekommunikation)|Latenzzeit]] und bei stark ausgelasteten Servern schnell zu einer Überlastung.


Im Unterschied dazu wird bei FastCGI das auszuführende Programm (inklusive Interpreter, falls nötig) nur einmal geladen und steht dann für mehrere Requests zur Verfügung – egal ob vom selben [[Client]] oder von unterschiedlichen Clients. Die Kommunikation mit dem Webserver erfolgt dabei nicht durch [[Umgebungsvariable]]n und [[Standard-Datenströme|Standardein-/-ausgabe]], sondern über [[Unix Domain Socket]]s oder [[Transmission Control Protocol|TCP]]-[[Netzwerkverbindung]]en, das heißt, das Programm kann sogar auf einem anderen Rechner laufen.
Im Unterschied dazu wird bei FastCGI das auszuführende Programm (inklusive Interpreter, falls nötig) nur einmal geladen und steht dann für mehrere Requests zur Verfügung – egal ob vom selben [[Client]] oder von unterschiedlichen Clients.  
* Die Kommunikation mit dem Webserver erfolgt dabei nicht durch [[Umgebungsvariable]]n und [[Standard-Datenströme|Standardein-/-ausgabe]], sondern über [[Unix Domain Socket]]s oder [[Transmission Control Protocol|TCP]]-[[Netzwerkverbindung]]en, das heißt, das Programm kann sogar auf einem anderen Rechner laufen.


Programmiertechnisch lässt sich der Unterschied zu CGI-Programmen daran festmachen, dass ein FastCGI-Programm eine zentrale [[Schleife (Programmierung)|Schleife]] hat, die Requests entgegennimmt und durchaus so lange laufen kann wie der Webserver:
Programmiertechnisch lässt sich der Unterschied zu CGI-Programmen daran festmachen, dass ein FastCGI-Programm eine zentrale [[Schleife (Programmierung)|Schleife]] hat, die Requests entgegennimmt und durchaus so lange laufen kann wie der Webserver:
Zeile 17: Zeile 21:
  $var = 'foo';
  $var = 'foo';
  while (FCGI::accept () >= 0) {
  while (FCGI::accept () >= 0) {
  ... http-Request bearbeiten ...
... http-Request bearbeiten ...
  }
  }
</syntaxhighlight>
</syntaxhighlight>
Zeile 44: Zeile 48:
==== Links ====
==== Links ====
===== Weblinks =====
===== Weblinks =====
= TMP =
== Weblinks ==
# https://de.wikipedia.org/wiki/FastCGI
# https://de.wikipedia.org/wiki/FastCGI
# [https://fastcgi-archives.github.io/FastCGI_Specification.html FastCGI-Spezifikation]
# [https://fastcgi-archives.github.io/FastCGI_Specification.html FastCGI-Spezifikation]
Zeile 52: Zeile 53:
[[Kategorie:Web-Entwicklung]]
[[Kategorie:Web-Entwicklung]]
[[Kategorie:Netzwerkprotokoll auf Anwendungsschicht]]
[[Kategorie:Netzwerkprotokoll auf Anwendungsschicht]]
[[Kategorie:Apache/HTTP/PHP]]
</noinclude>
</noinclude>

Aktuelle Version vom 19. Oktober 2024, 13:30 Uhr

FastCGI - Beschreibung

Beschreibung

FastCGI ist ein binäres Netzwerkprotokoll für die Anbindung eines Anwendungsservers an einen Webserver.

Unterschied zum CGI

Beim Aufruf einer auf CGI basierenden Webseite wird vom Webserver ein Prozess des CGI-Programms gestartet und am Ende des Requests wieder beendet.

  • Weil CGI-Programme häufig in einer Skriptsprache wie Perl geschrieben sind, bedeutet das, dass pro Seitenabruf der oft recht umfangreiche Interpreter geladen werden muss, was einen großen Overhead bedeutet (das Laden des Interpreters dauert bei einfachen CGI-Programmen länger als die eigentliche Programmausführung).
  • Zudem braucht jeder Request einen eigenen Interpreter, das heißt, bei mehreren parallelen Requests befinden sich entsprechend mehrere Kopien des Interpreters im Arbeitsspeicher des Servers.

CGI ist zwar durch seine Einfachheit, Unabhängigkeit von der Programmiersprache und weitreichende Unterstützung durch praktisch alle Webserver sehr weit verbreitet, jedoch führt der erwähnte Overhead zu einer hohen Latenzzeit und bei stark ausgelasteten Servern schnell zu einer Überlastung.

Im Unterschied dazu wird bei FastCGI das auszuführende Programm (inklusive Interpreter, falls nötig) nur einmal geladen und steht dann für mehrere Requests zur Verfügung – egal ob vom selben Client oder von unterschiedlichen Clients.

Programmiertechnisch lässt sich der Unterschied zu CGI-Programmen daran festmachen, dass ein FastCGI-Programm eine zentrale Schleife hat, die Requests entgegennimmt und durchaus so lange laufen kann wie der Webserver:

 use FCGI;
 $var = 'foo';
 while (FCGI::accept () >= 0) {
 ... http-Request bearbeiten ...
 }

Während des Durchlaufens dieser Schleife bleiben Variablen im Speicher erhalten, was einerseits weitere Optimierungsmöglichkeiten gegenüber CGI-Programmen ermöglicht, andererseits eine sorgfältigere Programmierung erfordert, um Speicherlecks (memory leaks) zu vermeiden.

Funktionsweise

Die Kommunikation mit dem Webserver erfolgt paketorientiert und verbindungslos.

Ein Datenpaket enthält im Header:

  • die FastCGI-Protokollversion
  • den Nachrichtentyp; entspricht weitgehend den aus CGI bekannten Datenquellen – ein Paket kann unter anderem transportieren:
  • eine Request-ID und
  • die Länge der folgenden Daten.

Mehrere Clients können gleichzeitig bedient werden, da sie sich anhand der Request-ID unterscheiden lassen; darum ist im Unterschied zu CGI nur eine Programminstanz nötig, um viele Clients zu bedienen.


Anhang

Siehe auch

Links

Weblinks
  1. https://de.wikipedia.org/wiki/FastCGI
  2. FastCGI-Spezifikation