Heim >Backend-Entwicklung >PHP-Tutorial >[PHP]Arbeitsteilung zwischen mehreren Prozessen von swoole_server
[PHP]swoole_server进程的分工
Zusammenfassung: Swoole ist ein leistungsstarkes Netzwerkkommunikations-Framework in PHP-Sprache. Es bietet asynchronen Multithread-Server in PHP-Sprache, asynchronen TCP/UDP-Netzwerk-Client, asynchrones MySQL, Datenbankverbindungspool, AsyncTask und Nachrichtenwarteschlange , Millisekunden-Timer, asynchrones Lesen und Schreiben von Dateien, asynchrone DNS-Abfrage. Leistungsstarke Funktionen werden durch mehrere Prozesse mit klarer Arbeitsteilung dahinter realisiert. Hier stellen wir die Arbeitsteilung mehrerer Prozesse im Detail vor, damit Anfänger das Swoole-Framework schneller verstehen können.
Verzeichnis
Swoole-Einführung
Offizielle Swoole-Website
Swoole: PHP neu definiert
Swoole: Ein leistungsstarkes Netzwerkkommunikations-Framework für die PHP-Sprache, das einen asynchronen Multithread-Server der PHP-Sprache, einen asynchronen TCP/UDP-Netzwerk-Client, asynchrones MySQL und einen Datenbankverbindungspool bereitstellt , AsyncTask, Nachrichtenwarteschlange, Millisekunden-Timer, asynchrones Lesen und Schreiben von Dateien, asynchrone DNS-Abfrage. Obwohl Swoole eine Standard-PHP-Erweiterung ist, unterscheidet sie sich tatsächlich von gewöhnlichen Erweiterungen. Gewöhnliche Erweiterungen stellen lediglich eine Bibliotheksfunktion bereit. Die Swoole-Erweiterung übernimmt nach der Ausführung die Kontrolle über PHP und tritt in die Ereignisschleife ein. Wenn ein E/A-Ereignis auftritt, ruft swoole automatisch die angegebene PHP-Funktion zurück.
Funktionsdemonstrationscode-Snippet
<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>
<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>
Weitere Codeausschnitte finden Sie auf der offiziellen Website von swoole.
Hauptprozessanalyse
Master-Prozess
Der Master-Prozess wird hauptsächlich verwendet, um den Betrieb des Swoole-Framework-Mechanismus sicherzustellen. Es werden mehrere funktionale Threads erstellt:
Manager-Prozess
Worker/Aufgabe in swoole Prozesse werden vom Manager-Prozess geforkt und verwaltet.
Warum nicht der Master-Prozess? Der Hauptgrund ist, dass der Master-Prozess multithreaded ist Gabeloperationen können nicht sicher durchgeführt werden.
Arbeitsprozess
Swoole bietet einen vollständigen Prozessverwaltungsmechanismus, wenn der Worker-Prozess abnormal beendet wird, z. B. bei einem schwerwiegenden PHP-Fehler, wenn er versehentlich von anderen Programmen beendet wird oder wenn er nach Erreichen der max_request-Nummer normal beendet wird. Der Hauptprozess startet den neuen Worker-Prozess neu. Code kann im Worker-Prozess wie gewöhnliches Apache PHP oder PHP-FPM geschrieben werden. Es besteht keine Notwendigkeit, asynchronen Callback-Code wie Node.js zu schreiben.
Aufgabenprozess
Der vollständige Name des Task-Prozesses lautet task_worker-Prozess , was eine besondere Art von Arbeitsprozess ist. Daher wird onWorkerStart
auch im Aufgabenprozess aufgerufen. Wenn $worker_id >= $serv->setting['worker_num']
, bedeutet dies, dass dieser Prozess ein task_worker ist, andernfalls bedeutet es, dass dieser Prozess ein Arbeitsprozess ist.
Korrespondenz zwischen Prozessen und Event-Callbacks
Callback-Funktionen im Master-Prozess
<span>onStart</span><span>onShutdown</span><span>onMasterConnect</span><span>onMasterClose</span><span>onTimer</span>
Callback-Funktionen im Worker-Prozess
<span>onWorkerStart</span><span>onWorkerStop</span><span>onConnect</span><span>onClose</span><span>onReceive</span><span>onTimer</span><span>onFinish</span>
Rückruffunktion im Aufgabenprozess
<span>onTask</span><span>onWorkerStart</span>
Rückruffunktion im Managerprozess
<span>onManagerStart</span><span>onManagerStop</span>