[PHP]swoole_server几个进程的分工
要旨: Swoole は PHP 语言の高性能ネットワーク通信フレームであり、PHP 语言を提供しています。マルチライン サーバー、TCP/UDP ネットワーク クライアント、MySQL、データベース接続池、AsyncTask、メッセージ列、秒タイマー、ファイル書き込み、DNS クエリ。強力な機能は、明確な分業を伴う複数のプロセスによって実現されます。ここでは、初心者が Swoole フレームワークをより早く理解できるように、いくつかのプロセスの分業について詳しく紹介します。
Swoole 公式サイト
Swoole: PHP 言語用の高性能ネットワーク通信フレームワーク。PHP 言語の非同期マルチスレッド サーバー、非同期 TCP/UDP ネットワーク クライアント、非同期 MySQL、データベース接続プールを提供します。 、AsyncTask、メッセージキュー、ミリ秒タイマー、非同期ファイルの読み書き、非同期DNSクエリ。 Swoole は標準的な PHP 拡張機能ですが、実は通常の拡張機能とは異なります。通常の拡張機能はライブラリ関数を提供するだけです。 swoole 拡張機能は、実行後に PHP の制御を引き継ぎ、イベント ループに入ります。 IO イベントが発生すると、swoole は指定された PHP 関数を自動的にコールバックします。
<span class="x">$serv = new swoole_server("127.0.0.1", 9501);</span><span class="x">$serv->set(array(</span><span class="x"> 'worker_num' => 8, //工作进程数量</span><span class="x"> 'daemonize' => true, //是否作为守护进程</span><span class="x">));</span><span class="x">$serv->on('connect', function ($serv, $fd){</span><span class="x"> echo "Client:Connect.\n";</span><span class="x">});</span><span class="x">$serv->on('receive', function ($serv, $fd, $from_id, $data) {</span><span class="x"> $serv->send($fd, 'Swoole: '.$data);</span><span class="x"> $serv->close($fd);</span><span class="x">});</span><span class="x">$serv->on('close', function ($serv, $fd) {</span><span class="x"> echo "Client: Close.\n";</span><span class="x">});</span><span class="x">$serv->start();</span>
<span class="x">$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);</span><span class="x">//设置事件回调函数</span><span class="x">$client->on("connect", function($cli) {</span><span class="x"> $cli->send("hello world\n");</span><span class="x">});</span><span class="x">$client->on("receive", function($cli, $data){</span><span class="x"> echo "Received: ".$data."\n";</span><span class="x">});</span><span class="x">$client->on("error", function($cli){</span><span class="x"> echo "Connect failed\n";</span><span class="x">});</span><span class="x">$client->on("close", function($cli){</span><span class="x"> echo "Connection close\n";</span><span class="x">});</span><span class="x">//发起网络连接</span><span class="x">$client->connect('127.0.0.1', 9501, 0.5);</span>
その他のコード スニペットについては、swoole の公式 Web サイトをご覧ください。
マスタープロセスは主に Swoole フレームワークメカニズムの動作を保証するために使用されます。これは、いくつかの機能スレッドを作成します。
スウールのワーカー/タスクプロセスは Manager プロセスによってフォークされ、管理されます。
なぜマスター プロセスではないのですか? 主な理由は、マスター プロセスがマルチスレッドであるためです。フォーク操作を安全に実行できません。
Swoole は、PHP の致命的なエラー、他のプログラムによって誤って強制終了された場合、または max_request 数に達した後に正常に終了した場合など、ワーカー プロセスが異常終了した場合に、完全なプロセス管理メカニズムを提供します。メインプロセスは新しいワーカープロセスを再起動します。通常のapache phpやphp-fpmと同様にワーカープロセス内でコードを記述することができます。 Node.js のような非同期コールバック コードを記述する必要はありません。
タスクプロセスの正式名は task_worker プロセスです、これは特殊な種類のワーカー プロセスです。したがって、 onWorkerStart
もタスクプロセス内で呼び出されます。 $worker_id >= $serv->setting['worker_num']
の場合はこのプロセスが task_worker であることを意味し、それ以外の場合はこのプロセスがワーカープロセスであることを意味します。
<span class="x">onStart</span><span class="x">onShutdown</span><span class="x">onMasterConnect</span><span class="x">onMasterClose</span><span class="x">onTimer</span>
<span class="x">onWorkerStart</span><span class="x">onWorkerStop</span><span class="x">onConnect</span><span class="x">onClose</span><span class="x">onReceive</span><span class="x">onTimer</span><span class="x">onFinish</span>
<span class="x">onTask</span><span class="x">onWorkerStart</span>
<span class="x">onManagerStart</span><span class="x">onManagerStop</span>