Einführung in das Prozessmodell von Swoole
Als wir den Server-Artikel zum ersten Mal trafen, sagten wir, dass Swoole ereignisgesteuert ist. Bei der Verwendung von Swoole haben wir auch festgestellt, dass die Verwendung von Swoole sehr einfach ist. Wir müssen nur den entsprechenden Rückruf registrieren, um unsere Geschäftslogik zu verarbeiten.
Bevor wir jedoch mit dem Erlernen von Swoole fortfahren, müssen wir uns noch einmal den Betriebsablauf und das Prozessmodell von Swoole ansehen.
Empfohlen (kostenlos): swoole
In den ersten beiden Artikeln haben wir kurz die Erstellung von Servern und die Ausführung von Skripten erläutert Unter der CLI werde ich nicht ausführlich sein.
Jetzt erstellen wir einen einfachen Server zur Analyse. Die Datei heißt server-process.php
$serv = new swoole_server('127.0.0.1', 9501); $serv->set([ 'worker_num' => 2, 'task_worker_num' => 1, ]); $serv->on('Connect', function ($serv, $fd) { }); $serv->on('Receive', function ($serv, $fd, $fromId, $data) { }); $serv->on('Close', function ($serv, $fd) { }); $serv->on('Task', function ($serv, $taskId, $fromId, $data) { }); $serv->on('Finish', function ($serv, $taskId, $data) { }); $serv->start();
$ ps aux | grep server-process root 21843 xxx... php server-process.php root 21844 xxx... php server-process.php root 21846 xxx... php server-process.php root 21847 xxx... php server-process.php root 21848 xxx... php server-process.php root 21854 xxx... grep --color=auto server-process
- Die Akzeptanzoperation des Hauptthreads. Der Socket-Server verwendet häufig Akzeptanz zum Blockieren. Im vorherigen Abschnitt finden Sie ein Bild zur Einführung der Socket-Programmierung. Das Signal entspricht einer Nachricht. Beispielsweise sendet die von uns häufig verwendete Strg + C-Taste tatsächlich ein SIGINT-Signal an den Hauptthread des Master-Prozesses, was bedeutet, dass Sie ihn beenden können. Es werden viele Arten von Signalen eingeführt später
- Normalerweise hat der Hauptthread das Neue verarbeitet. Nach dem Herstellen der Verbindung wird die Verbindung einem festen Reaktor-Thread zugewiesen, und dieser Reaktor-Thread ist immer für die Überwachung des Sockets verantwortlich (der oben erwähnte Socket wird auf Socket aktualisiert). ist ein Socket und wird für die netzwerkübergreifende Kommunikation mit einem anderen Prozess verwendet. Die Datei ist lesbar und beschreibbar. Mit anderen Worten: Wenn der Socket lesbar ist, werden die Daten gelesen und die Anforderung dem Worker zugewiesen Dies erklärt auch, warum wir den Worker-Prozess in der ersten Einführung von swoole erklärt haben. Die Bedeutung des dritten Parameters $fromId des Callbacks onReceive; wenn der Socket beschreibbar ist, werden die Daten an den TCP-Client gesendet.
Warum kann Swoole dann nicht eine Master-Worker-Prozessstruktur wie Nginx haben? Was macht der Manager-Prozess?
通常,worker进程被误杀或者由于程序的原因会异常退出,Manager进程为了保证服务的稳定性,会重新拉起新的worker进程,意思就是Worker进程你发生意外“死”了,没关系,我自身不“死”,就可以fork千千万万个你。
当然,Master进程和Manager进程我们是不怎么关心的,从前面两篇文章我们了解到,真正实现业务逻辑,是在worker/task进程内完成的。
再来一张图梳理下Manager进程和Worker/Task进程的关系。
再回到我们开篇抛出的的5个进程的问题,ps的结果简直一模一样,有没有办法能区分这5个进程哪个是哪个呢?
有同学要说啦,既然各个进程之间存在父子关系,那我们就可以通过linux的pstree命令查看结果。
$ pstree | grep server-process | | \-+= 02548 manks php server-process.php | | \-+- 02549 manks php server-process.php | | |--- 02550 manks php server-process.php | | |--- 02551 manks php server-process.php | | \--- 02552 manks php server-process.php | \--- 02572 manks grep server-process
注:centos下命令可修改为 pstree -ap | grep server-process
从结果中我们可以看出,进程id等于02548的进程就是Master进程,因为从结构上看就它是“父”嘛,02549是Manager进程,Worker进程和Task进程就是02550、02551和02552了(每个人的电脑上显示的进程id可能不同,但顺序是一致的,依照此模型分析即可)。
我们看到pstree命令也只能得到大致结果,而且在事先不知道的情况下,根本无法区分Worker进程和Task进程。
在swoole中,我们可以在各个进程启动和关闭的回调中去解决上面这个问题。各个进程的启动和关闭?那岂不是又要记住主进程、Manager进程、Worker进程,二三得六,6个回调函数?
是的,不过这6个是最简单也是最好记的,你实际需要了解的可能还要更多。
Master进程: 启动:onStart 关闭:onShutdown Manager进程: 启动:onManagerStart 关闭:onManagerStop Worker进程: 启动:onWorkerStart 关闭:onWorkerStop
提醒:task_worker也会触发onWorkerStart回调。
是不是很好记?那我们就在server-process.php中通过上面这几种回调来实现对各个进程名的修改。
$serv->on("start", function ($serv){ swoole_set_process_name('server-process: master'); }); // 以下回调发生在Manager进程 $serv->on('ManagerStart', function ($serv){ swoole_set_process_name('server-process: manager'); }); $serv->on('WorkerStart', function ($serv, $workerId){ if($workerId >= $serv->setting['worker_num']) { swoole_set_process_name("server-process: task"); } else { swoole_set_process_name("server-process: worker"); } });
注意:因mac下不支持swoole_set_process_name函数,即不能修改进程名,我们换台centos运行下看看结果(实际上你的服务器也不可能是mac)
# ps aux | grep server-process root 27546 xxx... server-process: master root 27547 xxx... server-process: manager root 27549 xxx... server-process: task worker root 27550 xxx... server-process: worker root 27551 xxx... server-process: worker root 27570 xxx... grep --color=auto simple
运行结果谁是谁一目了然,简直了!
有同学傻眼了,说在workerStart回调中写的看不明白,worker进程和task进程怎么区分的?
我来解释一下:在onWorkerStart回调中,$workerId表示的是一个值,这个值的范围是0~worker_num,worker_num是我们的对worker进程的配置,其中0~worker_num表示worker进程的标识,包括0但不包括worker_num;worker_num~worker_num+task_worker_num是task进程的标识,包括worker_num不包括worker_num+task_worker_num。
按照高中学的区间的知识可能更好理解,以我们案例的配置,workerId的值的范围就是[0,2],[0,2)表示worker进程,[2,3)就表示task_worker进程。
swoole的进程模型很重要,本篇掌握不好,后面的理解可能就会有些问题。
补充:
我们在onWorkerStart的回调中,用了serv−>setting去获取配置的server信息,在swoole中预留了一些swooleserver的属性,我们可以在回调函数中访问。比如说我们可以用serv−>setting去获取配置的server信息,在swoole中预留了一些swooleserver的属性,我们可以在回调函数中访问。比如说我们可以用serv->connections属性获取当前server的所有的连接,再比如我们可以通过$serv->master_pid属性获取当前server的主进程id等等。
Das obige ist der detaillierte Inhalt vonEinführung in das Prozessmodell von Swoole. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Die Verwendung von Swoole-Coroutinen in Laravel kann eine große Anzahl von Anfragen gleichzeitig verarbeiten. Zu den Vorteilen gehören: Gleichzeitige Verarbeitung: Ermöglicht die gleichzeitige Verarbeitung mehrerer Anfragen. Hohe Leistung: Basierend auf dem Linux-Epoll-Ereignismechanismus werden Anfragen effizient verarbeitet. Geringer Ressourcenverbrauch: Benötigt weniger Serverressourcen. Einfache Integration: Nahtlose Integration mit dem Laravel-Framework, einfach zu verwenden.

So implementieren Sie mit Swoole einen leistungsstarken HTTP-Reverse-Proxy-Server. Swoole ist ein leistungsstarkes, asynchrones und gleichzeitiges Netzwerkkommunikations-Framework, das auf der PHP-Sprache basiert. Es bietet eine Reihe von Netzwerkfunktionen und kann zur Implementierung von HTTP-Servern, WebSocket-Servern usw. verwendet werden. In diesem Artikel stellen wir vor, wie Sie mit Swoole einen leistungsstarken HTTP-Reverse-Proxy-Server implementieren, und stellen spezifische Codebeispiele bereit. Umgebungskonfiguration Zuerst müssen wir die Swoole-Erweiterung auf dem Server installieren

Swoole und Workerman sind beide leistungsstarke PHP-Server-Frameworks. Swoole ist für seine asynchrone Verarbeitung, hervorragende Leistung und Skalierbarkeit bekannt und eignet sich für Projekte, die eine große Anzahl gleichzeitiger Anfragen und einen hohen Durchsatz verarbeiten müssen. Workerman bietet die Flexibilität sowohl des asynchronen als auch des synchronen Modus mit einer intuitiven API, die sich besser für Benutzerfreundlichkeit und Projekte eignet, die ein geringeres Parallelitätsvolumen bewältigen.

Leistungsvergleich: Durchsatz: Swoole hat dank seines Coroutine-Mechanismus einen höheren Durchsatz. Latenz: Swooles Coroutine-Kontextwechsel hat einen geringeren Overhead und eine geringere Latenz. Speicherverbrauch: Swooles Coroutinen belegen weniger Speicher. Benutzerfreundlichkeit: Swoole bietet eine benutzerfreundlichere API für die gleichzeitige Programmierung.

Mit dem Swoole-Prozess können Benutzer wechseln. Die spezifischen Schritte sind: Erstellen eines Prozesses, Starten des Prozesses.

Um den Swoole-Dienst neu zu starten, führen Sie die folgenden Schritte aus: Überprüfen Sie den Dienststatus und rufen Sie die PID ab. Verwenden Sie „kill -15 PID“, um den Dienst zu stoppen. Starten Sie den Dienst mit demselben Befehl neu, der zum Starten des Dienstes verwendet wurde.

Swoole ist ein leistungsstarkes PHP-Netzwerkentwicklungsframework mit seinem leistungsstarken asynchronen Mechanismus und ereignisgesteuerten Funktionen, mit dem es schnell Serveranwendungen mit hoher Parallelität und hohem Durchsatz erstellen kann. Wenn das Unternehmen jedoch weiter wächst und die Parallelität zunimmt, kann die CPU-Auslastung des Servers zu einem Engpass werden, der die Leistung und Stabilität des Servers beeinträchtigt. Daher stellen wir in diesem Artikel vor, wie Sie die CPU-Auslastung des Servers optimieren und gleichzeitig die Leistung und Stabilität des Swoole-Servers verbessern können, und stellen spezifische Optimierungscodebeispiele bereit. eins,

Swoole in Aktion: So verwenden Sie Coroutinen für die gleichzeitige Aufgabenverarbeitung. Einführung In der täglichen Entwicklung stoßen wir häufig auf Situationen, in denen wir mehrere Aufgaben gleichzeitig bearbeiten müssen. Die herkömmliche Verarbeitungsmethode besteht darin, Multithreads oder Multiprozesse zu verwenden, um eine gleichzeitige Verarbeitung zu erreichen. Diese Methode weist jedoch bestimmte Probleme hinsichtlich Leistung und Ressourcenverbrauch auf. Als Skriptsprache kann PHP in der Regel nicht direkt Multithreading- oder Multiprozess-Methoden zur Bearbeitung von Aufgaben nutzen. Mithilfe der Swoole-Coroutinen-Bibliothek können wir jedoch Coroutinen verwenden, um eine leistungsstarke gleichzeitige Aufgabenverarbeitung zu erreichen. In diesem Artikel wird vorgestellt
