Heim > Artikel > Backend-Entwicklung > Verschiedene Arten der Integration zwischen PHP und Apache
1. CGI
CGI (Common Gateway Interface) wird normalerweise als Common Gateway Interface übersetzt, das die Verbindung zwischen dem HTTP-Server und darstellt Andere Programme auf dem Computer. Eine Kommunikationsschnittstelle, die es dem Webserver ermöglicht, bei Bedarf zusätzliche Programme zu starten, um dynamische Inhalte zu verarbeiten. CGI ist ein Protokoll, das definiert, wie der Webserver mit CGI-Programmen kommuniziert. Der Webserver akzeptiert die HTTP-Anfrage des Clients und erstellt dann einen Prozess zum Ausführen des CGI-Programms. Die Anfrage des Clients wird an das CGI-Programm weitergeleitet und das Ergebnis wird an den Webserver zurückgegeben, nachdem das CGI ausgeführt wurde.
Das Aufkommen von CGI hat das WEB von statisch zu dynamisch verändert. Da das Web immer beliebter wird, benötigen viele Websites dynamische Seiten, um mit den Zuschauern zu interagieren. Mit der Entwicklung der Netzwerktechnologie sind die Mängel der CGI-Methoden immer deutlicher geworden. Für jede Clientanfrage muss der Prozess eingerichtet und zerstört werden. Da HTTP eine dynamische Seite generieren muss, muss das System einen neuen Prozess starten, um das CGI-Programm auszuführen. Kontinuierliches Forken ist eine sehr zeit- und ressourcenintensive Aufgabe.
2. FastCGI
Wie wir alle wissen, ist das wiederholte Laden des CGI-Interpreters der Hauptgrund für eine geringe CGI-Leistung, wenn der CGI-Interpreter im Speicher bleibt und akzeptiert FastCGI-Prozessmanagement-Serverplanung kann gute Leistung, Skalierbarkeit, Failover-Funktionen usw. bieten.
FastCGI ist ein residentes CGI, das jederzeit ausgeführt werden kann. Solange es aktiviert ist, dauert es nicht jedes Mal, es zu forken, und es unterstützt auch verteiltes Rechnen (sodass die PHP-Programminterpretation und Die Ausführung kann dem PHP-Server überlassen werden), das heißt, sie kann auf einem anderen Host als dem Website-Server ausgeführt werden und Anfragen von anderen Website-Servern akzeptieren.
1. Laden Sie den FastCGI-Prozessmanager (IIS ISAPI oder Apache-Modul), wenn der Webserver startet.
2. Der FastCGI-Prozessmanager initialisiert sich selbst und startet mehrere CGI-Interpreterprozesse (in Multiple PHP). -cgi.exe sind im Task-Manager sichtbar und warten auf Verbindungen vom Webserver.
3. Wenn die Client-Anfrage den Webserver erreicht, wählt der FastCGI-Prozessmanager einen CGI-Interpreter aus und stellt eine Verbindung her. Der Webserver sendet CGI-Umgebungsvariablen und Standardeingaben an den FastCGI-Unterprozess php-cgi.exe.
4. 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 in WebServer ausgeführt wird) und verarbeitet diese. Im normalen CGI-Modus wird php-cgi.exe hier beendet.
3. Modul
Beim Kompilieren von PHP in ein Apache-Modul müssen Sie den Arbeitsmodus von Apaches MPM berücksichtigen.
Zuerst müssen wir verstehen, was MPM ist:
MPM: Multi Path Modules (Multi-Path-Verarbeitungsmodule) werden verwendet, um zu definieren, wie Apache bei der Reaktion auf mehrere funktioniert Benutzeranfragenmodell. Es gibt drei MPM-Modi:
Prefork (ein Prozess antwortet auf eine Anfrage);
Worker (eine Anfrage antwortet mit einem Thread, startet mehrere Prozesse und jeder Prozess generiert mehrere Threads); >
Ereignis (ein Prozess verarbeitet mehrere Anfragen);PHP, das als Modul installiert ist, hat keinen unabhängigen Prozess und wird zusammen mit Apache als Apache-Modul gestartet. Unter den oben genannten drei MPM-Modi belegt der Worker-Modus weniger Speicher als der Prefork-Modus und bietet bei hoher Parallelität eine bessere Leistung. Darüber hinaus wirkt sich die Verwendung des gemischten Multiprozess- und Multithread-Modus selbst dann, wenn ein Thread aufhängt, nur auf andere Threads im selben Prozess wie der Thread aus und hat keine Auswirkungen auf andere Prozesse. Wenn jedoch besonders viele Threads die Keep-Alive-Long-Verbindungsmethode verwenden, sind die Threads bis zum Timeout belegt, was dazu führt, dass in Szenarien mit hoher Parallelität keine Threads verfügbar sind. Der Ereignismodus verwendet einen dedizierten Thread, um diese Keep-Alive-Threads zu verarbeiten, wodurch dieses Problem besser gelöst wird. Empfohlenes Tutorial:Das obige ist der detaillierte Inhalt vonVerschiedene Arten der Integration zwischen PHP und Apache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!