Ich habe die Beziehung zwischen FastCgi und PHP-fpm fast eine Woche lang online gelesen. Es gibt wirklich unterschiedliche Meinungen und es gibt keine verbindliche Meinung Definition.
Einige Leute im Internet sagen, dass Fastcgi ein Protokoll ist und PHP-FPM dieses Protokoll implementiert;
Einige Leute sagen, dass PHP-FPM der Manager des FastCGI-Prozesses ist, der zur Verwaltung des FastCGI-Prozesses verwendet wird;
Einige sagen, dass php-fpm ein Patch für den PHP-Kernel ist
Einige sagen, dass es nach dem Ändern der php.ini-Konfigurationsdatei keine Möglichkeit gibt, reibungslos neu zu starten, also wurde php-fpm geboren
Außerdem sagen einige Leute, dass PHP-CGI der FastCGI-Manager ist, der mit PHP geliefert wird. Wenn ja, warum PHP-FPM erstellen?
Was ist CGI?
CGI soll sicherstellen, dass die vom Webserver übergebenen Daten in einem Standardformat vorliegen, was für Autoren von CGI-Programmen praktisch ist.
Der Webserver (wie Nginx) ist lediglich ein Verteiler von Inhalten. Wenn beispielsweise /index.html angefordert wird, findet der Webserver diese Datei im Dateisystem und sendet sie an den Browser. Dabei handelt es sich um statische Daten. Okay, wenn die Anfrage nun für /index.php ist, weiß nginx laut Konfigurationsdatei, dass es sich nicht um eine statische Datei handelt und vom PHP-Parser verarbeitet werden muss, dann wird es die Anfrage einfach verarbeiten und an übergeben der PHP-Parser. Welche Daten wird Nginx an den PHP-Parser übergeben? Die URL muss vorhanden sein, die Abfragezeichenfolge muss vorhanden sein, die POST-Daten müssen vorhanden sein und der HTTP-Header muss vorhanden sein. Nun, CGI ist das Protokoll, das festlegt, welche Daten übertragen werden sollen und in welchem Format sie übergeben werden sollen das Backend zur Bearbeitung der Anfrage.
Wenn der Webserver die Anfrage für /index.php erhält, startet er das entsprechende CGI-Programm, den PHP-Parser. Als nächstes analysiert der PHP-Parser die Datei php.ini, initialisiert die Ausführungsumgebung, verarbeitet die Anforderung, gibt das verarbeitete Ergebnis in dem von CGI angegebenen Format zurück und beendet den Prozess. Der Webserver gibt die Ergebnisse dann an den Browser zurück.
Okay, CGI ist ein Protokoll und hat nichts mit Prozessen oder ähnlichem zu tun.
Was ist dann Fastcgi?
Fastcgi wird verwendet, um die Leistung von CGI-Programmen zu verbessern.
Verbessern Sie die Leistung. Was sind also die Leistungsprobleme von CGI-Programmen?
"Der PHP-Parser analysiert die Datei php.ini und initialisiert die Ausführungsumgebung", das war's. Standard-CGI führt diese Schritte für jede Anfrage aus (seien Sie nicht müde! Den Prozess zu starten ist sehr ermüdend!), sodass die Bearbeitungszeit jedes Mal relativ lang ist. Das ist offensichtlich unvernünftig! Wie macht Fastcgi das? Zuerst startet Fastcgi einen Master, analysiert die Konfigurationsdatei, initialisiert die Ausführungsumgebung und startet dann mehrere Worker. Wenn eine Anfrage eingeht, leitet der Master diese an einen Worker weiter und kann die nächste Anfrage sofort annehmen. Das vermeidet Doppelarbeit und ist natürlich hocheffizient. Und wenn nicht genügend Arbeiter vorhanden sind, kann der Master je nach Konfiguration mehrere Arbeiter vorab starten und warten. Wenn zu viele Arbeiter im Leerlauf sind, werden natürlich einige gestoppt, was die Leistung verbessert und Ressourcen spart. Dies ist das Prozessmanagement von fastcgi.
Was ist PHP-FPM?
ist ein Programm, das Fastcgi implementiert und offiziell von PHP akzeptiert wurde.
Wie wir alle wissen, ist der Interpreter von PHP php-cgi. php-cgi ist nur ein CGI-Programm. Es kann nur Anfragen analysieren und Ergebnisse zurückgeben, weiß aber nicht, wie man Prozesse verwaltet (Eure Majestät, das kann ich wirklich nicht!). Es gibt also einige Programme, die php-cgi planen können Beispielsweise ist spawn-fcgi von lighthttpd getrennt. Nun, PHP-FPM ist dasselbe. Nach einer langen Entwicklungsphase wurde es nach und nach von allen erkannt (wissen Sie, in den letzten Jahren haben sich alle über die schlechte Stabilität von PHP-FPM beklagt), und das ist auch der Fall immer beliebter.
Okay, kommen wir endlich auf die obige Frage zurück.
Einige Leute im Internet sagen, dass Fastcgi ein Protokoll ist und PHP-FPM dieses Protokoll implementiert
Ja.
Manche Leute sagen, dass PHP-FPM der Manager des FastCGI-Prozesses ist, der zur Verwaltung des FastCGI-Prozesses verwendet wird
Ja. Das Verwaltungsobjekt von PHP-FPM ist PHP-CGI. Es kann jedoch nicht gesagt werden, dass php-fpm der Manager des Fastcgi-Prozesses ist, da Fastcgi, wie bereits erwähnt, ein Protokoll ist und es den Anschein hat, dass kein solcher Prozess existiert. Selbst wenn PHP-FPM existiert, kann es ihn (zumindest) nicht verwalten zur Zeit).
Manche Leute sagen, dass PHP-FPM ein Patch des PHP-Kernels ist
Das war vorher richtig. Da PHP-FPM zu Beginn nicht im PHP-Kernel enthalten war, müssen Sie zur Verwendung dieser Funktion PHP-FPM finden, das mit der Quellcodeversion übereinstimmt, den Kernel patchen und ihn dann kompilieren. Später wurde es viel praktischer, nachdem der PHP-Kernel PHP-FPM integriert hatte. Verwenden Sie einfach den Kompilierungsparameter --enalbe-fpm.
Einige Leute sagen, dass es nach dem Ändern der Konfigurationsdatei php.ini keine Möglichkeit mehr gibt, reibungslos neu zu starten, also wurde php-fpm geboren
Ja, nach der Änderung von php.ini kann der PHP-CGI-Prozess nicht reibungslos neu gestartet werden. Der Verarbeitungsmechanismus von PHP-FPM besteht darin, dass neue Arbeiter neue Konfigurationen verwenden und bestehende Arbeiter nach Abschluss der anstehenden Arbeit ruhen können. Dieser Mechanismus wird verwendet, um den Übergang zu erleichtern.
Manche Leute sagen, dass PHP-CGI der FastCGI-Manager ist, der mit PHP geliefert wird. Wenn ja, warum PHP-FPM erstellen?
Das ist nicht richtig. php-cgi ist lediglich ein Programm, das PHP-Skripte interpretiert.
Empfohlenes Lernen: „PHP-Video-Tutorial“