Heim  >  Artikel  >  Detaillierte Erklärung von FastCGI in PHP (Kernel-Exploration)

Detaillierte Erklärung von FastCGI in PHP (Kernel-Exploration)

黄舟
黄舟Original
2017-07-26 10:22:121688Durchsuche

Der vollständige Name von CGI ist „Common Gateway Interface“, das es einem Client ermöglicht, Daten von einem Webbrowser an ein Programm anzufordern, das auf einem Webserver ausgeführt wird. CGI beschreibt einen Standard zur Datenübertragung zwischen Client und Programm. Einer der Zwecke von CGI besteht darin, unabhängig von jeder Sprache zu sein, sodass CGI in jeder Sprache geschrieben werden kann, solange die Sprache über standardmäßige Eingabe-, Ausgabe- und Umgebungsvariablen verfügt. Wie PHP, Perl, TCL usw.

FastCGI ist ein Protokoll für die Kommunikation zwischen Webservern und Handlern. Es ist wie ein langlebiges CGI. Es kann jederzeit ausgeführt werden Nehmen Sie sich nicht die Zeit, einen Prozess zu forken, um damit umzugehen (dies ist der am meisten kritisierte Fork-and-Execute-Modus von CGI). Gerade weil es sich nur um ein Kommunikationsprotokoll handelt, unterstützt es auch verteiltes Rechnen, d. h. FastCGI-Programme können auf anderen Hosts als dem Website-Server ausgeführt werden und Anfragen von anderen Website-Servern entgegennehmen.

FastCGI ist eine sprachunabhängige, skalierbare offene CGI-Architekturerweiterung, die den CGI-Interpreterprozess im Speicher behält, um eine höhere Leistung zu erzielen. Das wiederholte Laden von CGI-Programmen ist der Hauptgrund für eine geringe CGI-Leistung. Wenn CGI-Programme im Speicher gehalten und vom FastCGI-Prozessmanager zur Planung akzeptiert werden, kann dies eine gute Leistung, Skalierbarkeit, Failover-Funktionen usw. bieten.

Im Allgemeinen ist der gesamte Workflow von FastCGI wie folgt:

Der FastCGI-Prozessmanager (IIS ISAPI oder Apache-Modul) wird geladen, wenn der Webserver startet.

FastCGI-Prozess Der Manager initialisiert sich selbst, startet mehrere CGI-Interpreterprozesse (sichtbar mehrere PHP-CGI) und wartet auf Verbindungen vom Webserver.

Wenn eine Client-Anfrage den Webserver erreicht, wählt der FastCGI-Prozessmanager einen CGI-Interpreter aus und stellt eine Verbindung zu ihm her. Der Webserver sendet CGI-Umgebungsvariablen und Standardeingaben an den FastCGI-Unterprozess php-cgi.

Nachdem der FastCGI-Unterprozess die Verarbeitung abgeschlossen hat, gibt er über dieselbe Verbindung Standardausgabe- und Fehlerinformationen an den Webserver zurück. Wenn der untergeordnete FastCGI-Prozess die Verbindung schließt, wird die Anfrage verarbeitet. Der untergeordnete FastCGI-Prozess wartet dann auf die nächste Verbindung vom FastCGI-Prozessmanager (der auf dem Webserver ausgeführt wird) und verarbeitet diese. Im CGI-Modus wird php-cgi an dieser Stelle beendet.

PHPs CGI implementiert das Fastcgi-Protokoll. Es handelt sich um einen TCP- oder UDP-Protokollserver, der beim Start einen Socket-Listener für den TCP/UDP-Protokollserver erstellt und entsprechende Anfragen empfängt zur Bearbeitung. Anschließend wird der Lebenszyklus von PHP eingegeben: Modulinitialisierung, Sapi-Initialisierung, Verarbeitung von PHP-Anforderungen, Schließen von Modulen, Sapi-Schließen usw. bilden den gesamten CGI-Lebenszyklus.

Am Beispiel von TCP werden auf der TCP-Serverseite im Allgemeinen die folgenden Schritte ausgeführt:

Rufen Sie die Socket-Funktion auf, um einen Streaming-Socket für TCP zu erstellen.

Aufruf die Bindungsfunktion, um die lokale Adresse des Servers an den zuvor erstellten Socket zu binden.

Rufen Sie die Listen-Funktion auf, um den neu erstellten Socket als Listener zu verwenden und auf die vom Client initiierte Verbindung zu warten Wenn mehrere Verbindungen mit diesem Socket verbunden sind, müssen sie möglicherweise in die Warteschlange gestellt werden.

Der Serverprozess ruft die Akzeptanzfunktion auf, um in den Blockierungszustand zu gelangen, bis ein Clientprozess die Verbindungsfunktion aufruft, um eine Verbindung herzustellen

Wenn eine Verbindung mit dem Client hergestellt wird, ruft der Server die Funktion read_stream auf, um die Anfrage des Clients zu lesen.

Nach der Verarbeitung der Daten ruft der Server die Funktion write auf, um eine Antwort an den Client zu senden.

FastCGI für PHP ermöglicht die Ausführung aller Ihrer PHP-Anwendungen über mod_fastci statt über mod_phpsusexec. FastCGI-Anwendungen sind schnell, weil sie langlebig und stabil sind und nicht bei jeder Anfrage gestartet und initialisiert werden müssen. Dies ermöglicht die Entwicklung von Anwendungen, die ansonsten im CGI-Paradigma unpraktisch wären (z. B. ein großes Skript oder eine Anwendung, die eine Verbindung zu einer einzelnen oder mehreren Datenbanken erfordert).

Vorteile von FastCGI:

PHP-Skripte laufen schneller (3 bis 30 Mal). Der PHP-Interpreter wird in den Speicher geladen, anstatt bei Bedarf aus dem Speicher gelesen zu werden, was die Leistung von Websites, die auf Skripts basieren, erheblich verbessert.

Es müssen weniger Systemressourcen verwendet werden. Da der Server den PHP-Interpreter nicht jedes Mal neu laden muss, wenn er benötigt wird, können Sie die Übertragungsgeschwindigkeit der Site erheblich erhöhen, ohne die CPU-Belastung zu erhöhen.

Es müssen keine Änderungen am vorhandenen Code vorgenommen werden. Alles da draußen funktioniert mit PHPs FastCGI.

Es gibt jedoch potenzielle Probleme:

Sie haben nur eine php.ini-Datei für alle Unterverzeichnisse verfügbar (/home/USERNAME/public_html/php.ini). Dies ist notwendig, um Ihren Website-Code zu optimieren. Wenn Sie mehrere php.ini-Dateien benötigen, um unterschiedliche Skriptanforderungen zu erfüllen, können Sie PHPs schnelles CGI in einem beliebigen Unterverzeichnis deaktivieren und es an anderer Stelle aktiv lassen. Bitte kontaktieren Sie den Support, wenn Sie dies tun müssen.

Bei allen Upgrades, die Sie an Ihrer PHP-Umgebung vornehmen (z. B. Änderungen an der Datei php.ini), kommt es zu einer Verzögerung von mehreren Minuten. Dies liegt daran, dass Ihre php.ini-Datei für eine schnellere Geschwindigkeit in den Speicher geladen wurde, anstatt jedes Mal, wenn sie benötigt wird, erneut aus dem Speicher gelesen zu werden.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn