Maison  >  Article  >  Explication détaillée de FastCGI en php (exploration du noyau)

Explication détaillée de FastCGI en php (exploration du noyau)

黄舟
黄舟original
2017-07-26 10:22:121704parcourir

Le nom complet de CGI est « Common Gateway Interface », qui permet à un client de demander des données d'un navigateur Web à un programme s'exécutant sur un serveur Web. CGI décrit une norme de transfert de données entre le client et le programme. L'un des objectifs de CGI est d'être indépendant de tout langage, de sorte que CGI peut être écrit dans n'importe quel langage, à condition que le langage ait des variables d'entrée, de sortie et d'environnement standard. Tels que php, perl, tcl, etc.

FastCGI est un protocole de communication entre les serveurs Web et les gestionnaires. C'est un schéma d'amélioration de CGI, c'est comme un CGI de longue durée. Il peut être exécuté à tout moment. ne pas prendre le temps de créer un processus pour le gérer (c'est le mode de création et d'exécution le plus critiqué de CGI). Précisément parce qu'il ne s'agit que d'un protocole de communication, il prend également en charge l'informatique distribuée, c'est-à-dire que les programmes FastCGI peuvent être exécutés sur des hôtes autres que le serveur du site Web et accepter les demandes d'autres serveurs du site Web.

FastCGI est une extension ouverte CGI à architecture évolutive et indépendante du langage qui conserve le processus d'interprétation CGI en mémoire pour obtenir des performances plus élevées. Le chargement répété des programmes CGI est la principale raison des faibles performances CGI. Si les programmes CGI sont conservés en mémoire et acceptés pour être planifiés par le gestionnaire de processus FastCGI, ils peuvent fournir de bonnes performances, une évolutivité, des fonctionnalités de basculement, etc.

Généralement, l'ensemble du flux de travail de FastCGI est le suivant :

Le gestionnaire de processus FastCGI (IIS ISAPI ou Apache Module) est chargé au démarrage du serveur Web

Processus FastCGI. Le gestionnaire s'initialise, démarre plusieurs processus interpréteurs CGI (visibles plusieurs php-cgi) et attend les connexions du serveur Web.

Lorsqu'une requête client atteint le serveur Web, le gestionnaire de processus FastCGI sélectionne et se connecte à un interpréteur CGI. Le serveur Web envoie des variables d'environnement CGI et des entrées standard au sous-processus FastCGI php-cgi.

Une fois le sous-processus FastCGI terminé, il renvoie la sortie standard et les informations d'erreur au serveur Web à partir de la même connexion. Lorsque le processus enfant FastCGI ferme la connexion, la demande est traitée. Le processus enfant FastCGI attend et gère ensuite la prochaine connexion du gestionnaire de processus FastCGI (exécuté sur le serveur Web). En mode CGI, php-cgi se termine à ce stade.

Le CGI de PHP implémente le protocole Fastcgi. C'est un serveur de protocole TCP ou UDP qui accepte les requêtes du serveur Web, il crée un écouteur de socket pour le serveur de protocole TCP/UDP et reçoit les requêtes associées. pour le traitement. On entre ensuite dans le cycle de vie de PHP : initialisation du module, initialisation de la sapi, traitement des requêtes PHP, fermeture du module, fermeture de la sapi, etc. constituent l'intégralité du cycle de vie du CGI.

En prenant TCP comme exemple, sur le serveur TCP, les étapes suivantes sont généralement effectuées :

Appelez la fonction socket pour créer un socket de streaming pour TCP

Appelez le ; fonction bind pour lier l'adresse locale du serveur au socket précédemment créé ;

Appelez la fonction d'écoute pour utiliser le socket nouvellement créé comme écouteur, en attendant la connexion initiée par le client lorsque le client a Quand. plusieurs connexions sont connectées à ce socket, elles devront peut-être être mises en file d'attente ;

Le processus serveur appelle la fonction accept pour entrer dans l'état de blocage jusqu'à ce qu'un processus client appelle la fonction connect pour établir une connexion

Après avoir établi une connexion avec le client, le serveur appelle la fonction read_stream pour lire la requête du client

Après avoir traité les données, le serveur appelle la fonction write pour envoyer une réponse au client ;

FastCGI pour PHP permet à toutes vos applications PHP de s'exécuter via mod_fastci au lieu de mod_phpsusexec. Les applications FastCGI sont rapides car elles sont durables et stables et n'ont pas besoin d'être démarrées et initialisées à chaque requête. Cela permet le développement d'applications qui seraient autrement peu pratiques dans le paradigme CGI (comme un script volumineux ou une application nécessitant une connexion à une ou plusieurs bases de données).

Avantages de FastCGI :

Les scripts PHP s'exécutent plus rapidement (3 à 30 fois). L'interpréteur PHP est chargé en mémoire au lieu d'être lu depuis la mémoire à chaque fois que cela est nécessaire, ce qui améliore considérablement les performances des sites qui s'appuient sur des scripts.

Besoin d'utiliser moins de ressources système. Étant donné que le serveur n'a pas besoin de charger l'interpréteur PHP à chaque fois que cela est nécessaire, vous pouvez augmenter considérablement la vitesse de transfert de votre site sans augmenter la charge du processeur.

Il n'est pas nécessaire d'apporter des modifications au code existant. Tout fonctionne avec FastCGI de PHP.

Mais il y a des problèmes potentiels :

Vous n'avez qu'un seul fichier php.ini disponible pour tous les sous-répertoires (/home/USERNAME/public_html/php.ini). Ceci est nécessaire pour optimiser le code de votre site Web. Si vous avez besoin de plusieurs fichiers php.ini pour répondre à différents besoins de script, vous pouvez désactiver le CGI rapide de PHP dans n'importe quel sous-répertoire et le laisser actif ailleurs. Veuillez contacter le support si vous avez besoin de le faire.

Toutes les mises à niveau que vous apportez à votre environnement PHP (telles que les modifications apportées au fichier php.ini) auront un délai de plusieurs minutes. En effet, votre fichier php.ini a été chargé en mémoire pour une vitesse plus rapide, plutôt que d'être relu depuis la mémoire à chaque fois que cela est nécessaire.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn