[PHP]swoole_server几个进程的分工
[PHP]swoole_server进程的分工
摘要:Swoole是一个PHP语言的高性能网络通信框架,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。强大的功能,由背后若干个分工明确的进程来实现,这里详细介绍下几个进程的分工,以便入门者更快速的理解Swoole框架。
- 博客: http://www.cnblogs.com/jhzhu
- 邮箱: jhzhuustc@gmail.com
- 作者: 知明所以
- 时间: 2015-08-17
目录
- [PHP]swoole_server进程的分工
- 目录
- Swoole简介
- Swoole:重新定义PHP
- 功能展示代码片段
- TCP Server
- TCP Client
- 主要进程分析
- Master进程
- Manager进程
- Worker进程
- Task进程
- 进程与事件回调的对应关系
- Master进程内的回调函数
- Worker进程内的回调函数
- Task进程内的回调函数
- Manager进程内的回调函数
Swoole简介
Swoole官网
Swoole:重新定义PHP
Swoole:PHP语言的高性能网络通信框架,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。 Swoole虽然是标准的PHP扩展,实际上与普通的扩展不同。普通的扩展只是提供一个库函数。而swoole扩展在运行后会接管PHP的控制权,进入事件循环。当IO事件发生后,swoole会自动回调指定的PHP函数。
功能展示代码片段
TCP Server
<span>$serv = new swoole_server("127.0.0.1", 9501);</span><span>$serv->set(array(</span><span> 'worker_num' => 8, //工作进程数量</span><span> 'daemonize' => true, //是否作为守护进程</span><span>));</span><span>$serv->on('connect', function ($serv, $fd){</span><span> echo "Client:Connect.\n";</span><span>});</span><span>$serv->on('receive', function ($serv, $fd, $from_id, $data) {</span><span> $serv->send($fd, 'Swoole: '.$data);</span><span> $serv->close($fd);</span><span>});</span><span>$serv->on('close', function ($serv, $fd) {</span><span> echo "Client: Close.\n";</span><span>});</span><span>$serv->start();</span>
TCP Client
<span>$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);</span><span>//设置事件回调函数</span><span>$client->on("connect", function($cli) {</span><span> $cli->send("hello world\n");</span><span>});</span><span>$client->on("receive", function($cli, $data){</span><span> echo "Received: ".$data."\n";</span><span>});</span><span>$client->on("error", function($cli){</span><span> echo "Connect failed\n";</span><span>});</span><span>$client->on("close", function($cli){</span><span> echo "Connection close\n";</span><span>});</span><span>//发起网络连接</span><span>$client->connect('127.0.0.1', 9501, 0.5);</span>
更多代码片段请见swoole官网。
主要进程分析
Master进程
Master进程主要用来保证Swoole框架机制的运行。它会创建几个功能性的线程:
- Reactor线程:就是真正处理TCP连接,收发数据的线程。swoole的主线程在Accept新的连接后,会将这个连接分配给一个固定的Reactor线程,并由这个线程负责监听此socket。在socket可读时读取数据,并进行协议解析,将请求投递到Worker进程。在socket可写时将数据发送给TCP客户端。
- Master线程(主线程): 负责:Accept新的连接、UNIX PROXI信号处理、定时器任务。
- 心跳包检测线程:(略)
- UDP收包线程:(略)
Manager进程
swoole中Worker/Task进程都是由Manager进程Fork并管理的。
- 子进程结束运行时,manager进程负责回收此子进程,避免成为僵尸进程。并创建新的子进程
- 服务器关闭时,manager进程将发送信号给所有子进程,通知子进程关闭服务
- 服务器reload时,manager进程会逐个关闭/重启子进程
为什么不是Master进程呢,主要原因是Master进程是多线程的,不能安全的执行fork操作。
Worker进程
- 接受由Reactor线程投递的请求数据包,并执行PHP回调函数处理数据
- 生成响应数据并发给Reactor线程,由Reactor线程发送给TCP客户端
- 可以是异步非阻塞模式,也可以是同步阻塞模式
- Worker以多进程的方式运行
Swoole提供了完善的进程管理机制,当Worker进程异常退出,如发生PHP的致命错误、被其他程序误杀,或达到max_request次数之后正常退出。主进程会重新拉起新的Worker进程。 Worker进程内可以像普通的apache+php或者php-fpm中写代码。不需要像Node.js那样写异步回调的代码。
Task进程
- 接受由Worker进程通过swoole_server->task/taskwait方法投递的任务
- 处理任务,并将结果数据返回给Worker进程
- 完全是同步阻塞模式
- Task以多进程的方式运行
Task进程的全称是task_worker进程,是一种特殊的worker进程。所以onWorkerStart
在task进程中也会被调用。当$worker_id >= $serv->setting['worker_num']
时表示这个进程是task_worker,否则,代表此进程是worker进程。
进程与事件回调的对应关系
Master进程内的回调函数
<span>onStart</span><span>onShutdown</span><span>onMasterConnect</span><span>onMasterClose</span><span>onTimer</span>
Worker进程内的回调函数
<span>onWorkerStart</span><span>onWorkerStop</span><span>onConnect</span><span>onClose</span><span>onReceive</span><span>onTimer</span><span>onFinish</span>
Task进程内的回调函数
<span>onTask</span><span>onWorkerStart</span>
Manager进程内的回调函数
<span>onManagerStart</span><span>onManagerStop</span>

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

AI Hentai Generator
Générez AI Hentai gratuitement.

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)

Pour implémenter le front-end du blog avec Vue, vous devez implémenter l'analyse markdown. S'il y a du code, vous devez implémenter la mise en évidence du code. Il existe de nombreuses bibliothèques d'analyse de démarques pour Vue, telles que markdown-it, vue-markdown-loader, Markdown, vue-markdown, etc. Ces bibliothèques sont toutes très similaires. Marked est utilisé ici et highlight.js est utilisé comme bibliothèque de mise en évidence du code. Les étapes d'implémentation spécifiques sont les suivantes : 1. Installez les bibliothèques dépendantes. Ouvrez la fenêtre de commande sous le projet vue et entrez la commande suivante npminstallmarked-save//marked pour convertir le markdown en htmlnpmins.

Tout d’abord, assurez-vous que Python3 et Tkinter sont installés. Les autres éléments dont nous avons besoin sont tkhtmlview et markdown2. Vous pouvez les installer en exécutant pipinstalltkhtmlviewmarkdown2 ou pip3installtkhtmlviewmarkdown2 (si vous disposez de plusieurs versions de Python). Lancez maintenant votre éditeur ou IDE préféré et créez un nouveau fichier (par exemple www.linuxidc.com.py (je l'ai nommé éditeur linuxidc.com)). Nous allons commencer par importer les bibliothèques nécessaires. fromtkinterimport*fro

Police de texte et police de Pygame Pygame utilise le module pygame.font pour créer un objet de police afin d'atteindre l'objectif de dessiner du texte. Les méthodes couramment utilisées de ce module sont les suivantes : Nom Description pygame.font.init() Initialiser le module de polices pygame.font.quit() Désinitialiser le module de polices pygame.font.get_init() Vérifier si le module de polices a été initialisé et renvoie une valeur booléenne. pygame.font.get_default_font() obtient le nom de fichier de la police par défaut. Renvoie le nom de fichier de la police dans le système. pygame.font.get_fonts() récupère tout

Comment utiliser le démarque dans VScode ? L'article suivant vous présentera la méthode de configuration de Markdown dans VScode et parlera de la syntaxe de base de Markdown. J'espère qu'il vous sera utile !

À mesure que les gens continuent de rechercher la technologie, de plus en plus d’outils et d’applications sont développés pour les aider à simplifier des tâches complexes. L'un d'eux est Markdown, qui est un langage de balisage léger qui convertit le texte brut en texte au format HTML. Cet article explique comment utiliser PHP pour implémenter la conversion Markdown.

Au cours du développement de l'ère Internet moderne, l'écriture de documents est progressivement passée de balises HTML encombrantes à une syntaxe Markdown plus simple et plus facile à lire et à écrire. ThinkPHP6 utilise un moteur de modèles très flexible et fournit des extensions Markdown pratiques, ce qui rend très facile l'écriture et l'affichage de fichiers Markdown dans les projets. Qu'est-ce que Markdown Markdown est un langage de balisage léger qui peut rapidement convertir des documents écrits en texte brut en HTML pour les utiliser dans

Présentation Dans les systèmes Linux, nous utilisons fréquemment la ligne de commande pour traiter les fichiers et les répertoires. Markdown est un langage de balisage concis permettant de créer et de formater rapidement des documents. Mais la lecture et la gestion des fichiers Markdown peuvent nécessiter un grand nombre de commandes et de paramètres, ce qui peut être un peu compliqué pour les débutants. À ce stade, vous pouvez utiliser la commande glow pour simplifier l’opération. glow est un outil de ligne de commande conçu pour simplifier le rendu des fichiers Markdown dans le terminal Linux. Son objectif principal est de fournir aux utilisateurs une expérience de lecture de fichiers Markdown plus intuitive et plus gérable. glow est livré avec une interface graphique conviviale qui vous permet d'afficher et de gérer les fichiers Markdown plus facilement. Avec cette interface, vous n'avez pas besoin de vous souvenir

Cet article vous apporte des connaissances pertinentes sur Markdown. Le contenu principal est de résumer et de partager avec vous une aide-mémoire Markdown. Les amis intéressés peuvent y jeter un œil ci-dessous.
