Maison > cadre php > Swoole > Organiser en détail les points de connaissances swoole (partage de synthèse)

Organiser en détail les points de connaissances swoole (partage de synthèse)

WBOY
Libérer: 2022-02-28 18:13:52
avant
3499 Les gens l'ont consulté

Cet article vous apporte des connaissances pertinentes sur swoole, y compris fastcgi demandant au processus maître swoole de distribuer aux processus enfants, mais ce ne sera pas comme le processus enfant php-fpm qui se termine après utilisation et d'autres problèmes connexes, j'espère que cela vous aidera. Tout le monde est utile.

Organiser en détail les points de connaissances swoole (partage de synthèse)

Apprentissage recommandé : Tutoriel vidéo swoole

swooleExplication du processus de la salle de discussion

L'ensemble du processus du salon de discussion est :

- Connexion à l'interface http de l'utilisateur pour obtenir une autorisation

- Obtenez la liste d'amis, le dernier message non lu des différents amis et le nombre de messages non lus (pour l'affichage de la page d'accueil) via l'interface http de demande d'autorisation

- Obtenez la liste des groupes via demande d'autorisation (les messages du groupe ne sont ni lus ni non lus afin d'économiser de l'espace de stockage)

- Établir le lien ws

- S'inscrire pour le mécanisme de déconnexion et de reconnexion, lorsque l'événement de fermeture est déclenché, reconnectez-vous à ws

- Établissez une minuterie ping et effectuez un ping toutes les 30 secondes

- Obtenez tous les messages non lus via l'interface ws, le client le traite et le pousse vers la barre de notification, etc.

- Recevoir un nouveau message push et l'afficher dans la liste des messages

- Lorsque vous cliquez dans une interface de message de groupe/ami, obtient automatiquement les n derniers messages et continue d'obtenir n messages lorsque l'utilisateur apparaît

fonctionnement en mode d'exécution

mode protocole cgi

Interface de passerelle commune en mode cgi (Common Gateway Interface), qui permet au serveur web de communiquer avec l'application via un protocole spécifique. Le principe d'appel est en gros :.

Demande utilisateur -> Le serveur Web reçoit la requête -> Processus enfant fork

Appeler le programme/exécuter le programme->Le programme renvoie le contenu/L'appel du programme se termine->Le serveur web reçoit le contenu->Retour à l'utilisateur

Puisque chaque requête utilisateur doit être fork pour créer un processus, appelez le programme une fois, puis détruisez le processus, les performances sont donc faibles

mode protocole fast-cgi

fast-cgi est une version améliorée du mode cgi. C'est comme un cgi résident. Tant qu'il est activé, il peut toujours traiter les requêtes et non plus. doit être terminé. Processus, le principe d'appel est à peu près :.

Initialisation du gestionnaire de processus fast-cgi du serveur Web ->fork n processus à l'avance

Demande utilisateur->le serveur Web reçoit la requête->la remet au gestionnaire de processus fast-cgi->la zone de gestion des processus fast-cgi la reçoit et la donne à l'un des processus fast-cgi inactifs pour traitement->traitement terminé, le processus fast-cgi devient inactif et attend la prochaine requête -> Le serveur web reçoit le contenu ->

Apache+php runtime , le mode module est utilisé par défaut, qui démarre php en tant que module Apache au démarrage d'Apache. Lorsqu'une demande utilisateur est reçue, elle est traitée directement en appelant le module mod_php. trouvé sur Baidu

Mode php-cli

Le mode php-cli appartient au mode de ligne de commande C'est le mode de fonctionnement le plus inconnu pour de nombreux développeurs qui viennent de commencer à apprendre PHP et ont commencé. wamp et wnmpCe mode ne fonctionne pas. Vous devez utiliser d'autres programmes pour saisir directement php xx.php afin d'exécuter le code php

La différence évidente entre le mode ligne de commande et le mode Web normal est :

* Il n'y a pas de délai d'attente

  • * Le tampon est désactivé par défaut

  • * Utilisation de STDIN et Entrée/sortie standard DOUT/ erreur

  • * echo var_dump, phpinfo et autres sorties sont directement sorties sur la console

  • * Différentes classes/fonctions qui peuvent être utilisées

  • * PHP différent Configurations .ini

  • php-fpm

  • PHP- FPM (FastCGI Process Manager) est utilisé pour remplacer la plupart des fonctions supplémentaires de PHP FastCGI et est très utile pour les sites Web à forte charge.

Ses fonctionnalités incluent :Fonctionnalités avancées de gestion des processus qui prennent en charge un arrêt/démarrage en douceur ;

Peut fonctionner dans différents environnements uid/gid/chroot, écouter différents ports et utiliser différents fichiers de configuration php.ini (peut remplacer le paramètre safe_mode) ;
  • journalisation stdout et stderr ;
  • Être capable de redémarrer et de mettre en cache les opcodes corrompus lorsque des situations inattendues se produisent ;
  • Prise en charge de l'optimisation du téléchargement de fichiers ;
  • "Slow Log" - enregistre la lenteur anormale causée par l'exécution du script (enregistre non seulement le nom du fichier, mais enregistre également les informations de trace PHP, vous pouvez utiliser ptrace ou des outils similaires pour lire et analyser les données en cours d'exécution du processus à distance);
  • fastcgi_finish_request() - Fonction spéciale : utilisée pour continuer à effectuer un travail fastidieux en arrière-plan (conversion d'entrée vidéo, traitement statistique, etc.) une fois la requête terminée et les données actualisées
  • ;
  • Génération de sous-processus dynamique/statique ;
  • Informations de base sur l'état d'exécution de SAPI (similaires au mod_status d'Apache) ;
  • Basé sur le fichier de configuration php.ini.
  • Principe de fonctionnement :

Cela fonctionne à peu près comme suit :démarrage php-fpm ->Générer des processus de traitement de protocole fast-cgi->Écouter un port à attendre tâches Demande utilisateur->Le serveur Web reçoit la requête->La requête est transmise à php-fpm->php-fpm est transmis à un processus inactif pour traitement->Le traitement du processus est terminé ->php-fpm renvoie au serveur Web ->Le serveur Web reçoit les données->Retour à l'utilisateur

Protocole réseau

Le protocole réseau est un ensemble de règles, normes ou conventions établies pour les données échange dans les réseaux informatiques, tous les ordinateurs/téléphones mobiles La communication avec d'autres appareils réseau doit suivre les protocoles réseau.

Le protocole réseau est divisé en 7 niveaux selon les étapes de communication De haut en bas :

  • Couche application.

  • Couche de présentation

  • Couche de session

  • Couche de transport

  • Couche réseau

  • Couche de liaison de données

  • Couche physique

protocole ip (couche réseau)

le protocole ip est le protocole de base d'Internet, c'est actuellement le protocole réseau le plus populaire

Portée

La responsabilité de l'IP est de transmettre les données de la source à la destination. Il n'est pas responsable de garantir la fiabilité de la livraison, le contrôle de flux, la commande de paquets et d'autres services communs aux protocoles d'hôte à hôte.

Interface

Ce protocole est appelé par le protocole hôte à hôte, et ce protocole est chargé d'appeler le protocole du réseau local pour transmettre le paquet de données au prochaine passerelle ou hôte de destination. Par exemple, TCP peut appeler le protocole IP, en transmettant l'adresse de destination et l'adresse source comme paramètres lors de l'appel. IP forme un paquet de données et appelle l'interface du réseau local (protocole) pour transmettre le paquet de données.

Opération

IP implémente deux fonctions de base : l'adressage et la segmentation. IP peut transmettre le paquet de données à l'adresse de destination en fonction de l'adresse de destination incluse dans l'en-tête du paquet de données. Dans ce processus, IP est responsable de la sélection du chemin de transmission. Cette sélection de chemin est appelée fonction de routage. Si certains réseaux ne peuvent transmettre que de petits paquets de données, IP peut réassembler les paquets de données et l'indiquer dans le champ d'en-tête. Ces fonctions de base sont incluses dans le module IP, qui existe sur chaque hôte et passerelle du réseau, et ces modules (en particulier sur la passerelle) ont des fonctions de routage et d'autres services. Pour IP, il n’y a pas de connexion entre les paquets de données et il est difficile de dire quoi que ce soit sur les connexions ou les liens logiques pour IP.

IP utilise quatre technologies clés pour fournir des services : type de service, durée de vie, options et code de vérification d'en-tête. Le type de service fait référence à la qualité de service attendue. Un type de service est un ensemble de paramètres qui représentent les services qu'Internet peut fournir. Ce type de service est utilisé par les passerelles pour sélectionner les paramètres de livraison réels sur un réseau spécifique, ou sur le prochain réseau à traverser, ou sur la prochaine passerelle pour acheminer ce paquet. La durée de vie est la limite supérieure de la durée de vie d'un paquet. Il est défini par l'expéditeur et traité par la route. Si la durée de vie est nulle lorsqu'il n'arrive pas, jetez le paquet. L'option est importante pour les fonctions de contrôle, mais pour une communication normale, sa présence n'est pas nécessaire. Les options incluent les horodatages, la sécurité et le routage spécial. Le code de contrôle d'en-tête garantit la transmission correcte des données. Si la vérification échoue, l'intégralité du paquet de données est rejetée.

adresse IP

Lors de la transmission de données de la source à la destination, vous avez besoin d'une adresse IP pour la transmettre. la plus courante est l'adresse IPv4, telle que 127.0.0.1 (adresse locale) 119.75.217.109 (IP Baidu)

La transmission IP doit avoir une adresse IP claire avant que les données puissent être envoyées

tcp (Transport Layer)

TCP (Transmission Control Protocol) est un protocole de communication de couche de transport fiable, orienté connexion et basé sur un flux d'octets, spécifié par la définition RFC 793 de l'IETF. Dans le modèle OSI simplifié des réseaux informatiques, il remplit les fonctions spécifiées par la couche de transport de quatrième couche. Le protocole de datagramme utilisateur (UDP) est un autre protocole de transport important au sein de la même couche. Dans la suite des protocoles Internet, la couche TCP est une couche intermédiaire située au-dessus de la couche IP et en dessous de la couche application. Des connexions fiables, de type canal, sont souvent nécessaires entre les couches d'application de différents hôtes, mais la couche IP ne fournit pas un tel mécanisme de flux, mais fournit une commutation de paquets peu fiable.

La couche application envoie un flux de données représenté par des octets de 8 bits pour la transmission inter-réseau à la couche TCP, puis TCP divise le flux de données en segments de message de longueur appropriée (généralement connectés par l'ordinateur ) La limite maximale d'unité de transmission (MTU) de la couche liaison de données du réseau). TCP transmet ensuite le paquet résultant à la couche IP, qui le transmet via le réseau à la couche TCP de l'entité réceptrice. Afin de garantir qu'aucune perte de paquets ne se produise, TCP attribue à chaque paquet un numéro de séquence. En même temps, le numéro de séquence garantit également que les paquets transmis à l'entité finale réceptrice sont reçus dans l'ordre. L'entité réceptrice renvoie ensuite un accusé de réception correspondant (ACK) pour le paquet reçu avec succès ; si l'entité émettrice ne reçoit pas d'accusé de réception dans un délai aller-retour raisonnable (RTT), le paquet de données correspondant est supposé avoir été reçu. sera retransmis. TCP utilise une fonction de somme de contrôle pour vérifier si les données comportent des erreurs ; les sommes de contrôle sont calculées à la fois lors de l'envoi et de la réception.

Poignée de main à trois voies

TCP est le protocole de couche de transport sur Internet, qui utilise le protocole de prise de contact à trois voies pour établir une connexion. Lorsque la partie active envoie une demande de connexion SYN, elle attend que l'autre partie réponde par SYN+ACK et effectue finalement une confirmation ACK sur le SYN de l'autre partie. Cette méthode d'établissement d'une connexion peut éviter les connexions erronées. Le protocole de contrôle de flux utilisé par TCP est un protocole à fenêtre glissante de taille variable. Le processus de négociation à trois voies TCP est le suivant :

  • Le client envoie un message SYN (SEQ=x) au serveur et entre dans l'état SYN_SEND.

  • Le serveur reçoit le message SYN, répond par un message SYN (SEQ=y) ACK (ACK=x+1) et entre dans l'état SYN_RECV.

  • Le client reçoit le message SYN du serveur, répond par un message ACK (ACK=y+1) et entre dans l'état Établi.

La connexion est réussie

Une fois la connexion réussie, les deux parties peuvent se transmettre des flux d'octets et fermer la connexion à tout moment. Les données transmises ont les caractéristiques suivantes. caractéristiques

  • Les données transmises sont divisées par TCP en blocs de données les plus adaptés à l'envoi et transmises au protocole IP. Ces données envoyées sont appelées segment de message ou segment.

  • tcp est une connexion fiable. Chaque fois qu'un segment de données est envoyé, une minuterie sera démarrée à chaque fois qu'un segment de données est reçu, une confirmation sera envoyée si la minuterie ne reçoit pas la confirmation à temps. les données seront renvoyées

  • TCP conservera une somme de contrôle de son en-tête et de ses données. Il s'agit d'une somme de contrôle de bout en bout conçue pour détecter tout changement dans les données pendant la transmission. S'il y a une erreur dans la somme de contrôle du segment reçu, TCP ignorera le segment et n'accusera pas réception du segment (en espérant que l'expéditeur expirera et renverra).

  • Deux applications échangent un flux d'octets de 8 bits via une connexion TCP. TCP n'insère pas d'identifiants d'enregistrement dans le flux d'octets. Nous appelons ce service bytestream. Si l'application d'une partie transmet d'abord 10 octets, puis 20 octets, puis 50 octets, l'autre partie de la connexion ne sera pas en mesure de comprendre combien d'octets l'expéditeur a envoyé à chaque fois. Tant que son propre tampon de réception n'est pas plein, le récepteur TCP en recevra autant qu'il peut en recevoir. Une extrémité place un flux d'octets sur une connexion TCP, et le même flux d'octets apparaîtra à l'autre extrémité de la connexion TCP.

Quatre vagues

L'établissement d'une connexion nécessite trois poignées de main, et la fin d'une connexion nécessite quatre vagues, ce qui est dû à la demi-fermeture de TCP. Le processus spécifique est le suivant.

  • Un processus de candidature appelle d'abord la clôture, qui est censée effectuer une « clôture active ». Le TCP à cette extrémité envoie ensuite un segment FIN pour indiquer que les données ont été envoyées.

  • Le peer qui reçoit ce FIN effectue une "passive close" (passive close), et ce FIN est confirmé par TCP.

  • Remarque : La réception de FIN est également transmise au processus de candidature récepteur en tant que fin de fichier, placée après toute autre donnée en attente pour être reçue par le processus de candidature, car la réception de FIN Cela signifie que le Le processus de demande de réception n’a aucune donnée supplémentaire à recevoir sur la connexion correspondante.

  • Au bout d'un moment, le processus d'application qui reçoit ce caractère de fin de fichier appellera close pour fermer son socket. Cela amène son TCP à envoyer également un FIN.

  • L'extrémité d'envoi d'origine TCP qui reçoit ce FIN final (c'est-à-dire l'extrémité qui effectue l'arrêt actif) confirme ce FIN. Puisque chaque direction nécessite un FIN et un ACK, 4 segments sont généralement requis.

"Habituellement" signifie que dans certains cas, le FIN de l'étape 1 est envoyé avec les données. De plus, les sections envoyées aux étapes 2 et 3 proviennent de la fin qui effectue l'arrêt passif, et peuvent l'être. fusionné dans la section A. Entre les étapes 2 et 3, il est possible de faire circuler les données du côté qui effectue l'arrêt passif vers le côté qui effectue l'arrêt actif. C'est ce qu'on appelle la « demi-fermeture ». Lorsqu'un processus Unix se termine, soit volontairement (appel de exit ou retour de la fonction principale) ou involontaire (réception d'un signal qui termine le processus), tous les descripteurs ouverts sont fermés, ce qui entraîne également que tout TCP reste ouvert. Un FIN est également émis sur la connexion. Le client ou le serveur peut effectuer un arrêt actif. En règle générale, le client effectue un arrêt actif, mais certains protocoles, tels que HTTP/1.0, demandent au serveur d'effectuer un arrêt actif.

Le TCP en php

php peut utiliser la fonction socket, l'extension swoole et la fonction stream pour créer un socket du protocole TCP, lier le port de la carte réseau et exécuter un serveur TCP /opérations client En php, nous n'avons pas besoin de comprendre la poignée de main TCP, nous avons seulement besoin de savoir que ip:port peut se connecter/créer un serveur/client TCP

En utilisant le socket de php, nous pouvons directement envoyer des chaînes et recevoir est aussi une chaîne, tout le reste est du langage et de ce que le système d'exploitation doit faire

Nous n'avons qu'à gérer l'intégrité de la chaîne. Par exemple, nous utilisons php comme serveur TCP

  • Après la connexion du client. est réussi, j'ai envoyé une chaîne "easyswoole est un très bon framework swoole"

  • Le serveur ne reçoit que 9 octets à chaque fois, donc la première acquisition ne recevra que la chaîne incomplète de "easyswool", et vous devez continuer à obtenir des données

protocole http

Analyse du processus

httpLe processus d'une demande est à peu près le suivant :

  • Les saisies de l'utilisateur dans le navigateur www.easyswoole.com

  • analyse de serveur DNS/ou hôtes locaux, comparaison d'hôtes de routeur pour obtenir ip

  • Si le navigateur accède au port par défaut 80, l'adresse TCP consultée est ip:80

  • prise de contact à 3 voies du protocole TCP pour établir la connexion

  • Envoyer un en-tête de requête http

  • Le serveur obtient l'en-tête de la requête http, indiquant que l'accès est un accès http, analyse l'en-tête de la requête http, obtient le type de requête, le format de la requête et les données de la requête (cookie, get, post data)

  • Le serveur envoie des données de réponse et se déconnecte activement

  • Le navigateur reçoit les données de réponse, analyse le type de texte de réponse, analyse les données et se déconnecte

    Dans le protocole https, il existe une couche supplémentaire de protocoles de cryptage et de décryptage tls et ssl dans la requête et la réponse. Le port par défaut est passé de 80 à 443.

http en phper

Étant donné que php est principalement utilisé pour les serveurs web, le protocole auquel les développeurs php sont le plus exposés est le protocole http basé sur le protocole tcp/ip

Parmi Programmeurs PHP juniors, ils ne connaissent pas vraiment le protocole http en détail, mais ils peuvent utiliser le réseau f12-> du navigateur pour afficher les en-têtes de requête spécifiques du protocole http et les en-têtes de réponse envoyés par le serveur

WebSocket protocole

génère un arrière-plan

Avant le protocole WebSocket, dans une page Web, une salle de discussion ne pouvait utiliser que ajax pour interroger et demander en permanence si le serveur dispose de données est généré, et une telle méthode de mise en œuvre entraînera une série de problèmes :

  • Si l'intervalle d'interrogation est trop court, le client et le serveur effectueront en permanence des poignées de main http tcp dans un certain laps de temps / Le mouvement d'agitation et la transmission des en-têtes de requête http et des en-têtes de réponse consomment beaucoup de ressources du serveur S'il y a un grand nombre d'utilisateurs, le serveur sera occupé et même temps d'arrêt.

  • Le client ne peut obtenir si le serveur a des données à renvoyer qu'en envoyant une requête http à chaque fois, et l'actualité des données ne peut être garantie

En raison de cette situation, WebSocket est apparu. Il ne nécessite qu'une seule poignée de main http pour maintenir une longue connexion, afin que le serveur puisse envoyer activement des messages au client, réduisant considérablement le nombre de tours de consommation. mécanisme de requête

Principe de mise en œuvre

Dans le processus de mise en œuvre de la connexion Websocket, une demande de connexion Websocket doit être émise via le navigateur, puis le serveur envoie une réponse à ce processus. est généralement appelé « Poignée de main » .

Dans l'API WebSocket, le navigateur et le serveur n'ont besoin que d'effectuer une action de prise de contact, puis un canal rapide est formé entre le navigateur et le serveur.

Les deux peuvent se transmettre directement des données. Dans ce protocole WebSocket, il nous apporte deux avantages majeurs pour réaliser des services en temps réel :

  • En-tête : L'en-tête qui communique entre eux est très petit - seulement environ 2 octets

  • Server Push : Server Push, le serveur ne reçoit plus passivement la demande du navigateur avant de renvoyer les données, mais la pousse activement vers le navigateur lorsqu'il y a de nouvelles données.

udp (couche de transport)

UDP est l'abréviation de User Datagram Protocol. Le nom chinois est User Datagram Protocol, qui est OSI (Open System Interconnection, Open System Interconnection). Référence Un protocole de couche transport sans connexion dans le modèle qui fournit des services de transfert d'informations orientés transactions simples et peu fiables IETF RFC 768 est la spécification formelle d'UDP. Le numéro de protocole UDP dans les paquets IP est 17.

Le nom complet du protocole UDP est User Datagram Protocol. Dans le réseau, il est utilisé pour traiter les paquets de données comme le protocole TCP. Dans le modèle OSI, la quatrième couche, la couche transport, est la couche supérieure du protocole IP. UDP présente l'inconvénient de ne pas permettre le regroupement et l'assemblage des paquets de données et l'impossibilité de trier les paquets de données. En d'autres termes, une fois qu'un message est envoyé, il est impossible de savoir s'il est arrivé complètement et en toute sécurité. UDP est utilisé pour prendre en charge les applications réseau qui doivent transmettre des données entre ordinateurs. De nombreuses applications réseau client/serveur, y compris les systèmes de vidéoconférence sur réseau, nécessitent l'utilisation du protocole UDP. Le protocole UDP est utilisé depuis de nombreuses années depuis sa création. Bien que sa gloire initiale ait été éclipsée par certains protocoles similaires, UDP reste encore aujourd'hui un protocole de couche de transport réseau très pratique et réalisable.

Comme le célèbre protocole TCP (Transmission Control Protocol), le protocole UDP est directement au-dessus du protocole IP (Internet Protocol). Selon le modèle de référence OSI (Open Systems Interconnection), UDP et TCP sont tous deux des protocoles de couche transport. La fonction principale du protocole UDP est de compresser le trafic de données du réseau sous forme de paquets de données. Un paquet de données typique est une unité de transmission de données binaires. Les 8 premiers octets de chaque paquet de données sont utilisés pour contenir des informations d'en-tête et les octets restants sont utilisés pour contenir des données de transmission spécifiques.

udp et tcp

UDP et TCP sont tous deux des protocoles de couche de transport, tous deux sont situés sur la couche supérieure du protocole IP. Leurs différences sont : .

  • udp est un protocole sans connexion et ne nécessite pas de poignée de main TCP

  • La longueur maximale de l'UDP envoyé à chaque fois est de 65 535, tandis que TCP peut envoyer en continu après la poignée de main

  • Le protocole udp utilise la valeur de contrôle dans l'en-tête pour garantir la sécurité des données. La valeur de contrôle est d'abord calculée par un algorithme spécial chez l'expéditeur des données et doit être recalculée après avoir été transmise au destinataire. Si un datagramme est falsifié par un tiers pendant la transmission ou endommagé en raison du bruit de ligne ou pour d'autres raisons, les calculs de somme de contrôle de l'expéditeur et du destinataire ne correspondront pas, de sorte que le protocole UDP peut détecter s'il y a une erreur. Ceci est différent du protocole TCP, qui nécessite une valeur de contrôle.

  • Les messages UDP n'ont pas de champs de garantie de fiabilité, de garantie de séquence et de contrôle de flux, etc., et leur fiabilité est faible. Cependant, précisément parce que le protocole UDP a moins d'options de contrôle, le délai de transmission des données est faible et l'efficacité de la transmission des données est élevée. Il convient aux applications qui ne nécessitent pas une grande fiabilité ou aux applications qui peuvent garantir la fiabilité, telles que DNS. , TFTP et SNMP attendent.

  • Dans un environnement où la qualité du réseau est très insatisfaisante, la perte de paquets du protocole UDP sera plus grave. TCP effectuera une vérification de confirmation pour s'assurer que l'autre partie reçoit avec succès

  • udp peut diffuser à tous les hôtes de la passerelle

php multi-processus

Le concept de multi-processus

mentionné précédemment, Le multi-processus est principalement une méthode de développement permettant de développer un niveau de logique métier et de traiter plusieurs tâches en parallèle. Qu'est-ce que le développement du niveau de logique métier ?

Comme nous l'avons mentionné ci-dessus, php-fpm est le gestionnaire de processus de fast-cgi. que plusieurs processus fast-cgi seront démarrés, en attente du traitement des tâches

Au niveau du logiciel php-fpm, les multiples processus de fast-cgi appartiennent au traitement multi-processus. Cependant, lorsque l'utilisateur initie une requête,

Lorsque nginx le confie à php-fpm pour gérer la requête, à ce niveau, chaque requête n'occupe en fait qu'un seul processus php fast-cgi pour le traitement de la logique. est en fait un seul processus.

De même, lorsque nous exécutons directement un fichier php, par défaut, un seul processus php est ouvert pour exécuter le code php

Scénario de développement multi-processus

Dans le mode Web traditionnel, PHP a toujours été un processus unique pour traiter la logique métier. Seul le mode php-cli, qui est utilisé pour gérer des tâches asynchrones et en tant que serveur réseau, peut être multi. -le traitement de processus doit être utilisé. Par conséquent, la plupart des PHPers conviennent aux personnes qui ne connaissent pas le concept de multi-processus PHP

Utiliser l'extension PCNTL

Communication de processus

  • La communication pipeline est divisée en canaux nommés et canaux sans nom Attendez, vous pouvez le faire vous-même Rechercher des détails

  • Communication de la file d'attente de messages, utilisant la file d'attente de messages Linux, étendue via sysvmsg, vous pouvez afficher : http://www.php20.cn/article/137

  • Communication du signal de processus, vous pouvez visualiser : http://www.php20.cn/article/134

  • La communication de la mémoire partagée cartographie une section de mémoire accessible par d'autres processus. Cette mémoire partagée est créée par un processus, mais est accessible par plusieurs processus.

  • La mémoire partagée est la méthode IPC la plus rapide. Elle est spécialement conçue pour l'inefficacité des autres méthodes de communication inter-processus.

  • Il est souvent utilisé en conjonction avec d'autres mécanismes de communication, tels que les signaux, pour réaliser la synchronisation et la communication entre les processus.

  • Communication par prise

  • La communication avec des tiers peut également être réalisée à l'aide d'opérations sur les fichiers, de MySQL, de Redis et d'autres méthodes

Coroutine

La coroutine n'est pas un processus ou un thread, son processus d'exécution est plus similaire à un sous-programme, ou Dit un appel de fonction sans valeur de retour.

Un programme peut contenir plusieurs coroutines, qui peuvent être comparées à un processus contenant plusieurs threads, comparons donc les coroutines et les threads ci-dessous.

Nous savons que plusieurs threads sont relativement indépendants, ont leur propre contexte et que la commutation est contrôlée par le système ; les coroutines sont également relativement indépendantes,

ont leur propre contexte, mais leur commutation est contrôlée par elles-mêmes et est commuté par la coroutine actuelle L'accès à d'autres coroutines est contrôlé par la coroutine actuelle. La coroutine et le processus sont déterminés par ce qui précède. Code 2, on retrouve facilement cette coroutine. En fait, il s'agit simplement d'une fonction exécutée dans un processus, mais cette fonction passera à la prochaine exécution, pour ainsi dire :

La coroutine n'est qu'une série de codes de tâches exécutés dans le processus, mais ces codes de tâches peuvent Remarque pour l'exécution croisée, les coroutines ne sont pas multi-tâches en parallèle, ce sont des multi-tâches en série. Chaque processus n'exécute qu'une seule tâche à la fois

La portée des coroutinesEn raison. aux coroutines Un processus est une chaîne de codes de tâches dans le processus, donc ses variables globales, variables statiques et autres variables sont toutes partagées, y compris le tampon global de php.Ainsi, pendant le développement, vous devez accorder une attention particulière à les variables globales dans la coroutine, les variables statiques, tant qu'elles sont modifiées dans une certaine coroutine, cela affectera toutes les coroutines. Lorsque vous utilisez la fonction ob buffer pour intercepter, vous devez également déterminer si elle sera contaminée par la sortie d'autres. coroutines. Utilisez Code 2 dans la séquence d'exécution de la coroutine explique que lorsque la tâche 1 attribue une valeur de 1 à $_GET['name'], la tâche 2 lira $_GET['name'] et ce sera également 1, et task2 sera $_GET['name'] Lorsque la valeur est 2, task3 lit $_GET['name'] et ce sera également 2

Connexion E/S dans la coroutine

Dans la coroutine, une attention particulière doit être portée. Vous ne pouvez pas partager une connexion E/S, sinon cela provoquerait des anomalies de données. Utilisez le code 2 dans la

séquence d'exécution de la coroutine

pour expliquer cela lorsque la tâche 1 et. Les fonctions task2 partagent la connexion MySQL et toutes deux effectuent des requêtes, en raison de la séquence d'exécution de la coroutine

Les processus sont croisés, ce qui peut amener la tâche 1 à obtenir les données demandées par la tâche 1+la tâche 2, ou une partie des données peut être perdue et obtenu par la tâche2.

En raison du mécanisme d'exécution croisée des coroutines, les données interrogées par la tâche1+la tâche2 peuvent être perdues. Les connexions E/S doivent être indépendantes, nous devons donc créer une connexion dans chacune. coroutine. Cependant, en raison du nombre limité de connexions mysql et redis, et que l'ouverture et la fermeture de la connexion consomment beaucoup de ressources, nous pouvons utiliser la solution de pool de connexions. Implémenter des connexions partagées (à condition que chaque connexion soit utilisée uniquement par). une coroutine à la fois)

Apprentissage recommandé : tutoriel swoole

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!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal