1. nginx + swoole
swoole est un moteur de communication réseau asynchrone, parallèle et hautes performances, écrit en langage C pur, fournissant Un serveur multi-thread asynchrone en langage PHP. Swoole dispose d'un serveur et d'un client http/websocket intégrés, d'un serveur http2.0, prend en charge des coroutines similaires au langage Go et peut utiliser du code synchrone pour implémenter des procédures en une seule étape.
swoole adopte le modèle Reactor de multiplexage d'E/S et de blocage asynchrone, et utilise Reactor multithread + Worker multithread pour implémenter des E/S asynchrones. Reactor est basé sur Epoll et chaque Reactor peut gérer d'innombrables demandes de connexion, de sorte qu'il peut facilement gérer une simultanéité élevée.
En mode Nginx+swoole, nginx sert de redirecteur de couche d'accès frontal et swoole sert de serveur d'applications pour créer des services Web à haute concurrence.
2. nginx + php-fpm
FastCGI est un standard technique neutre, et php-fpm est le gestionnaire de processus FastCGI pour le langage php.
Le mode fork-and-execute de CGI présente de nombreux défauts. Chaque fois qu'une requête est reçue, un processus doit être bifurqué, et une seule requête peut être reçue pour répondre. PHP doit ré-analyser php pour chaque ; requête Web.ini, rechargez toutes les extensions et initialisez toutes les structures de données.
FastCGI sera démarré à l'avance, l'analyse du fichier php.ini, le chargement des extensions et l'initialisation de la structure des données ne seront terminés qu'au démarrage. Il existe en tant que serveur de gestion CGI et utilise un pool de processus/threads pour. pré-démarrez une série de Le processus enfant est en attente de traitement. Ensuite, le serveur Web envoie une requête. Une fois que FastCGI reçoit la requête, elle est transmise au processus enfant pour traitement. Il n'est pas nécessaire de démarrer CGI après avoir reçu la requête, ce qui sera beaucoup plus rapide. Le serveur Web demande au gestionnaire de processus FastCGI via une connexion longue socket.
Le processus FastCGI est comme un CGI résident Lorsqu'une requête arrive, le gestionnaire de processus FastCGI sélectionne et connecte un interpréteur PHP-CGI pour recevoir les variables d'environnement et l'entrée standard envoyées par le serveur Web. traité, renvoie une sortie standard ou une erreur au serveur Web à partir de la même connexion que le sous-processus de l'interpréteur PHP-CGI en attente de gérer la prochaine connexion du gestionnaire de processus FastCGI.
3. apache + mod_php
Exécuter php en mode mod_php signifie que php est démarré en tant que module d'Apache. Ce n'est qu'au démarrage d'Apache que le fichier de configuration php.ini sera lu et que le module d'extension sera chargé. Les modules d'extension ne seront pas lus et chargés pendant l'exécution d'Apache. Pour des raisons de stabilité et de sécurité, Apache utilise généralement le mode prefork par défaut pour exécuter les programmes PHP. En mode prefork, un processus de contrôle distinct est responsable de la génération des processus enfants, qui sont utilisés pour écouter les demandes et y répondre.
Apache essaie toujours de conserver certains processus enfants de rechange ou inactifs pour les requêtes à venir, afin que le client n'ait pas besoin d'attendre que le processus enfant soit généré avant d'obtenir le service. Cependant, à mesure que le nombre de connexions augmente, Apache doit générer davantage de processus pour répondre aux requêtes. Le processeur change fréquemment de processus, ce qui consomme des événements et des ressources, entraînant une baisse des performances d'Apache. En même temps, Apache bloque le modèle d'E/S ; de manière synchrone. Dans cette situation, select traverse plusieurs handles de connexion pour savoir si le handle a une notification d'événement, donc l'efficacité est très faible.
Tutoriel recommandé : Tutoriel vidéo PHP
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!