Plusieurs concepts à connaître dans Workerman
La colonne suivante du tutoriel d'utilisation de Workerman vous présentera plusieurs concepts que vous devez connaître sur Workerman. J'espère qu'il sera utile à vos amis dans le besoin !
Workerman est un framework de service de socket PHP open source et hautes performances développé uniquement en PHP. Il ne s'agit pas d'un framework MVC, mais d'un framework de services socket de niveau inférieur et plus général. Vous pouvez l'utiliser pour développer des agents TCP, des agents à relais, des serveurs de jeux, des serveurs de messagerie et des serveurs FTP.
Recommandé : Tutoriel Workerman
En fait, Workerman est similaire à une version PHP de nginx, et le noyau est également multi-processus + Epoll + IO non bloquant . Chaque processus Workerman peut maintenir des dizaines de milliers de connexions simultanées. Parce qu'il réside en mémoire, il ne repose pas sur des conteneurs tels qu'Apache, nginx et php-fpm et offre des performances ultra élevées.
Prend en charge TCP, UDP, UNIXSOCKET en même temps, prend en charge les connexions longues, prend en charge Websocket, HTTP, WSS, HTTPS et d'autres protocoles de communication ainsi que divers protocoles personnalisés. Il comporte de nombreux composants hautes performances tels que des minuteries, des clients socket asynchrones, Mysql asynchrone, Redis asynchrone, HTTP asynchrone et des files d'attente de messages asynchrones.
Tout d'abord, vous devez comprendre quelques concepts de base, 1. Multi-processus 2. Epoll 3. IO non bloquantes
1. Multi-processus :
Tout d'abord, qu'est-ce qu'un processus ? Un processus comprend du code, des données et des ressources (mémoire) allouées au processus. Intuitivement, un processus est un PID dans un système informatique. . Le système d'exploitation protège l'espace des processus des interférences des processus externes, c'est-à-dire qu'un processus ne peut pas accéder à la mémoire d'un autre processus.
Parfois, il est nécessaire de communiquer entre les processus. Dans ce cas, le système d'exploitation peut être utilisé pour fournir un mécanisme de communication inter-processus. Normalement, lorsque vous exécutez un fichier exécutable, le système d'exploitation crée un processus pour qu'il s'exécute. Mais si le fichier d'exécution est basé sur une conception multi-processus, le système d'exploitation créera plusieurs processus sur le processus d'origine. Le code exécuté entre ces processus est le même, mais les résultats de l'exécution peuvent être les mêmes. .C'est peut-être différent.Pourquoi avons-nous besoin de plusieurs processus ? L'idée la plus intuitive est que si le système d'exploitation prend en charge le multicœur, alors un fichier exécutable peut s'exécuter sur différents cœurs même s'il n'est pas multicœur, pendant qu'un processus attend des opérations d'E/S, un autre ; Le processus peut également s'exécuter sur le processeur. Exécutez-le pour améliorer l'utilisation du processeur et l'efficacité du programme.
Sur les systèmes Linux, vous pouvez utiliser fork() pour créer un processus enfant dans le processus parent. Après qu'un processus ait appelé fork(), le système allouera d'abord des ressources au nouveau processus, telles que les données de stockage et l'espace de code. Ensuite, toutes les valeurs et l'état du processus d'origine sont copiés dans le nouveau processus. Seules quelques valeurs sont différentes du processus d'origine pour distinguer les différents processus. La fonction fork() reviendra deux fois, une fois au processus parent (renvoyant le pid du processus enfant ou les informations d'échec du fork) et une fois au processus enfant (renvoyant 0). À ce stade, les deux processus se sont séparés et chacun s’est exécuté dans le système.2. IO non bloquantes :
Tout d'abord, qu'est-ce que l'IO, c'est-à-dire le fonctionnement de l'entrée et de la sortie. L'essence du réseau IO est la lecture du socket. Socket est abstrait comme un flux dans le système Linux, et IO peut être compris comme une opération de convection. Pour un accès IO (prenons la lecture comme exemple), les données seront d'abord copiées dans le tampon du noyau du système d'exploitation, puis copiées du tampon du noyau du système d'exploitation vers l'espace d'adressage du programme d'application. Ainsi, lorsqu'une opération de lecture se produit, elle passera par deux étapes : La première étape (attente des données) : En attente que les données soient prêtes (En attente que les données soient prêtes prêt). La deuxième étape (copie des données) : Copie des données du noyau vers le processus (Copie des données du noyau vers le processus)Pour le flux de socket (c'est-à-dire IO),Étape 1 : implique généralement d'attendre qu'un paquet de données arrive sur le réseau, puis soit copié dans un tampon du noyau. Étape 2 : Copiez les données du tampon du noyau vers le tampon du processus d'application.Les modèles d'IO réseau sont à peu près les suivants :
IO synchrone)
Blocage d'IO (blocage d'IO) IO ) la ressource est indisponible, la requête IO est bloquée jusqu'au résultat du retour (données ou timeout). Sous Linux, toutes les sockets sont bloquées par défaut. La caractéristique du blocage des IO est qu'elles sont bloquées dans les deux étapes de l'exécution des IO (attente des données et copie des données). Lorsque les ressources IO non bloquantes (IO non bloquantes) ne sont pas disponibles, la requête IO part et revient, et les données de retour indiquent que la ressource n'est pas disponible. Sous Linux, si les données ne sont pas prêtes, elles ne bloqueront pas le processus utilisateur et le noyau reviendra immédiatement au processus, indiquant que cette commande ne peut pas être satisfaite immédiatement (EAGAIN ou EWOULDBLOCK). Par conséquent, le non-blocage est obtenu grâce à l'interrogation. Multiplexage IO (multiplexage IO) Le multiplexage IO est ce que nous appelons select, poll et epoll. Dans certains endroits, cette méthode IO est également appelée IO pilotée par événement. L'avantage de select/epoll est qu'un seul processus peut gérer les E/S de plusieurs connexions réseau en même temps.Son principe de base est que les fonctions select, poll et epoll interrogeront en permanence toutes les sockets dont elles sont responsables. Lorsque les données arrivent dans une certaine socket, le processus utilisateur en sera informé. Dans le modèle de multiplexage IO, en pratique, chaque socket est généralement réglé sur non bloquant.
Cependant, l’ensemble du processus utilisateur est en réalité bloqué en permanence. C'est juste que le processus est bloqué par la fonction select au lieu d'être bloqué par le socket IO. Par conséquent, le multiplexage des E/S est bloqué sur les appels système tels que select et epoll, mais pas sur les appels système d'E/S réels tels que recvfrom.
IO pilotée par signal (IO pilotée par signal)
IO asynchrone (IO asynchrone) Une fois que le processus utilisateur a lancé l'opération de lecture, il peut immédiatement commencer à faire autre chose . D'un autre côté, du point de vue du noyau, lorsqu'il reçoit une lecture asynchrone, elle reviendra immédiatement, cela ne provoquera donc aucun blocage du processus utilisateur.
Ensuite, le noyau attendra que la préparation des données soit terminée, puis copiera les données dans la mémoire utilisateur. Lorsque tout cela sera terminé, le noyau enverra un signal au processus utilisateur pour lui dire que. l'opération de lecture est terminée.
3. Epoll : epoll est facile à comprendre maintenant. epoll est un sondage amélioré réalisé par le noyau Linux pour gérer de gros lots de descripteurs de fichiers. version améliorée de l'interface select/poll, qui peut améliorer considérablement l'utilisation du processeur système du programme lorsque seul un petit nombre de connexions actives sont actives parmi un grand nombre de connexions simultanées.
PS. Plusieurs points à noter :
1 : Le multiplexage des E/S est-il un modèle de blocage synchrone ou un modèle de blocage asynchrone ?
La synchronisation nécessite d'attendre activement les notifications de messages, tandis que l'asynchrone nécessite de recevoir passivement des notifications de messages et d'obtenir passivement des messages via des rappels, des notifications, un statut, etc. Lorsque le multiplexage IO bloque l'étape de sélection, le processus utilisateur attend activement et appelle la fonction de sélection pour obtenir le message d'état de données prêtes, et son état de processus est bloqué. Par conséquent, le multiplexage IO est classé comme mode de blocage synchrone.
2 : Qu'est-ce que la simultanéité élevée ?
Les programmes hautement concurrents utilisent généralement la méthode synchrone non bloquante plutôt que la méthode multi-threading + blocage synchrone. Pour comprendre cela, regardez d’abord la différence entre la concurrence et le parallélisme. C'est-à-dire que le nombre de concurrence fait référence au nombre de tâches exécutées en même temps (comme les requêtes HTTP traitées en même temps), tandis que le nombre de parallélisme est le nombre de ressources physiques pouvant fonctionner simultanément ( comme le nombre de cœurs de processeur).
En planifiant correctement les différentes étapes des tâches, le nombre de simultanéités peut être bien supérieur au degré de parallélisme. C'est le secret pour lequel quelques processeurs peuvent prendre en charge des dizaines de milliers de requêtes simultanées d'utilisateurs. Dans cette situation de forte concurrence, la création d’un processus ou d’un thread pour chaque tâche (demande de l’utilisateur) coûte très cher. La méthode synchrone non bloquante peut lancer plusieurs requêtes IO en arrière-plan, ce qui peut servir un grand nombre de requêtes IO simultanées en un seul processus.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds





Pour implémenter le téléchargement et le téléchargement de fichiers dans des documents Workerman, des exemples de code spécifiques sont requis Introduction : Workerman est un framework de communication réseau asynchrone PHP hautes performances, simple, efficace et facile à utiliser. Dans le développement réel, le téléchargement et le téléchargement de fichiers sont des exigences fonctionnelles courantes. Cet article explique comment utiliser le framework Workerman pour implémenter le téléchargement et le téléchargement de fichiers, et donne des exemples de code spécifiques. 1. Téléchargement de fichiers : le téléchargement de fichiers fait référence à l'opération de transfert de fichiers de l'ordinateur local vers le serveur. Ce qui suit est utilisé

Introduction à la façon d'implémenter l'utilisation de base des documents Workerman : Workerman est un framework de développement PHP hautes performances qui peut aider les développeurs à créer facilement des applications réseau à haute concurrence. Cet article présentera l'utilisation de base de Workerman, y compris l'installation et la configuration, la création de services et de ports d'écoute, la gestion des demandes des clients, etc. Et donnez des exemples de code correspondants. 1. Installez et configurez Workerman. Entrez la commande suivante sur la ligne de commande pour installer Workerman : c

Swoole et Workerman sont tous deux des frameworks de serveur PHP hautes performances. Connu pour son traitement asynchrone, ses excellentes performances et son évolutivité, Swoole convient aux projets qui doivent gérer un grand nombre de requêtes simultanées et un débit élevé. Workerman offre la flexibilité des modes asynchrone et synchrone, avec une API intuitive mieux adaptée à la facilité d'utilisation et aux projets gérant des volumes de concurrence inférieurs.

Développement Workerman : appel vidéo en temps réel basé sur le protocole UDP Résumé : Cet article présentera comment utiliser le framework Workerman pour implémenter la fonction d'appel vidéo en temps réel basée sur le protocole UDP. Nous aurons une compréhension approfondie des caractéristiques du protocole UDP et montrerons comment créer une application d'appel vidéo en temps réel simple mais complète à travers des exemples de code. Introduction : Dans la communication réseau, les appels vidéo en temps réel sont une fonction très importante. Le protocole TCP traditionnel peut rencontrer des problèmes tels que des retards de transmission lors de la mise en œuvre d'appels vidéo en temps réel. Et UDP

Comment utiliser Workerman pour créer un système d'équilibrage de charge à haute disponibilité nécessite des exemples de code spécifiques. Dans le domaine de la technologie moderne, avec le développement rapide d'Internet, de plus en plus de sites Web et d'applications doivent gérer un grand nombre de requêtes simultanées. Afin d’atteindre une haute disponibilité et des performances élevées, le système d’équilibrage de charge est devenu l’un des composants essentiels. Cet article explique comment utiliser le framework open source PHP Workerman pour créer un système d'équilibrage de charge à haute disponibilité et fournit des exemples de code spécifiques. 1. Introduction à Workerman Worke

Comment implémenter la fonction timer dans le document Workerman Workerman est un puissant framework de communication réseau asynchrone PHP qui fournit une multitude de fonctions, y compris la fonction timer. Utilisez des minuteries pour exécuter du code dans des intervalles de temps spécifiés, ce qui est très approprié pour les scénarios d'application tels que les tâches planifiées et les interrogations. Ensuite, je présenterai en détail comment implémenter la fonction de minuterie dans Workerman et fournirai des exemples de code spécifiques. Étape 1 : Installer Workerman Tout d’abord, nous devons installer Worker

La façon d'implémenter la fonction de proxy inverse dans le document Workerman nécessite des exemples de code spécifiques.Introduction : Workerman est un cadre de communication réseau multi-processus PHP hautes performances qui offre des fonctions riches et des performances puissantes et est largement utilisé dans la communication Web en temps réel et à long terme. connexions. Parmi eux, Workerman prend également en charge la fonction de proxy inverse, qui peut réaliser l'équilibrage de charge et la mise en cache des ressources statiques lorsque le serveur fournit des services externes. Cet article explique comment utiliser Workerman pour implémenter la fonction de proxy inverse.

La façon d'implémenter la communication TCP/UDP dans le document Workerman nécessite des exemples de code spécifiques. Workerman est un framework PHP asynchrone piloté par les événements hautes performances qui est largement utilisé pour implémenter la communication TCP et UDP. Cet article explique comment utiliser Workerman pour implémenter la communication basée sur TCP et UDP et fournit des exemples de code correspondants. 1. Créez un serveur TCP pour la communication TCP. Il est très simple de créer un serveur TCP à l'aide de Workerman. Il vous suffit d'écrire le code suivant : <?ph.
