Workerman と Swoole は、この段階では非常に人気があります。時間があるときにお互いを知る必要があります。そうしないと、PHP サークルには参加できません。 Swoole は C 言語で実装されたソケット通信フレームワークであるのに対し、Workerman は純粋な PHP で実装されたソケット通信フレームワークであり、プロセス モデルにも多くの違いがあります。
まずはスウールのプロセスモデルについて、次の解析図を見てみましょう。
マスタープロセス
このプロセスはより複雑であり、私の意見ではコアプロセスでもあります。これは複数のプロセスが含まれるプロセスです。スレッド、つまり 1 つのメイン スレッドと n 個のリアクター スレッド (数は構成可能)。このうち、メインスレッドは新しい接続を受け入れるために使用され、各リアクター スレッドが維持する責任がある接続の数を評価し、最も小さい番号のリアクター スレッドに割り当てて、各リアクター スレッドの負荷が確実に確保されるようにします。最大限にバランスが取れています。基本的に、ソケットが読み取り可能または書き込み可能になると、ソケットはリアクター スレッドによってワーカー プロセスに送信されるか、クライアントに送信されます。さらに、メイン スレッドは、リアクター スレッドがシグナルを受信したときに中断を避けるために、すべてのシグナルを引き継ぐ責任もあります。率直に言うと、マスター プロセスは接続の受け入れとホスティング、ソケットの読み取りと書き込み (データの送受信) を担当し、本質的には IO を担当します。リアクター スレッドは完全に非同期でノンブロッキングの作業メソッドであることにも注意してください。
マネージャー プロセス
マネージャー プロセスはワーカー プロセスとタスクワーカー プロセスのマザーであり、より傲慢に言うと、マネージャー プロセスはワーカー プロセスとタスクワーカー プロセスを分岐させます。したがって、管理者プロセスは、ワーカー プロセスとタスクワーカー プロセスのステータスの監視、予期せずハングアップした場合の新しいプロセスの再起動 (ゾンビ プロセスの回避)、スムーズな再起動 (これが凡例です) など、ワーカー プロセスとタスクワーカー プロセスのメンテナンス義務を負う必要があります。 )リロード)。
ワーカー プロセス
ワーカー プロセスはマネージャー プロセスによってフォークされており、端的に言えば、このプロセスは単にレンガを動作させるだけです (公式ドキュメントで何度も言及されているビジネス コード) . 実際、これは通常のプロセスです。これらの凝ったビジネス ロジック コード、理解できますか?しかし、ワーカー プロセスのさらに興味深い点は、このプロセスが非同期または同期で動作できることです。意味が分からない場合は、まず覚えて慣れてから話しましょう。
タスクワーカー プロセス
タスクワーカー プロセス (以下、タスクワーカー プロセスと呼びます) は、本質的にはワーカー プロセスですが、特殊なワーカー プロセスです。ワーカー プロセスに時間と労力を要する操作がある場合は、まずそれをタスク作成者プロセスにスローし、他の作業を自分で行うことができます。タスク作成者が終了すると、ワーカー プロセスがそれらの操作を取得します。これは非常に便利です。ただし、タスク実行プロセスは同期モードでのみ動作し、非同期モードは使用できません。これが、タスク実行プロセスがタイマーを使用できないのに、ワーカー プロセスがタイマーを使用できる理由です。
これらのプロセスがどのように連携して機能するかを簡単にまとめて説明しましょう。簡単に言うと、マスター プロセスは営業ジョブを受け取る責任がありますが、特定の作業はワーカー プロセスが実行します。ワーカー プロセスが一部のプロセスが多すぎて複雑すぎると感じた場合、タスク実行プロセスにそれを任せることができます。マネージャープロセスは、物流従事者プロセスとテイカープロセスの人事サポート部門であり、彼らの生と死、飲食と睡眠に責任を負います。
Workerman のプロセス モデルは比較的単純です。まず、Swoole と比較して、Workerman には Swoole にリアクター スレッドがありません。第 2 に、Workerman には、通常使用されるワーカー プロセスとタスクカー プロセスがありません。通常業務を扱います。 workman の場合、ソケットはワーカー プロセスによって処理されますが、swoole ではメイン プロセスのリアクター スレッドによって処理されます。データを受信した後、swoole は独自のワーカー プロセス (fpm プロセスに似ています) を通じてビジネスを処理できます。
workerman は、高性能 PHP ソケット サーバー フレームワークです。Workerman は、PHP マルチプロセスおよび libevent イベント ポーリング ライブラリに基づいています。PHP 開発者は、次のような独自のネットワーク アプリケーションを開発するために 1 つまたは 2 つのインターフェイスを実装するだけで済みます。 Rpc サービス、チャット ルーム サーバー、モバイル ゲーム サーバーなど
Workerman の目標は、PHP 開発者が PHP ソケットや PHP マルチプロセスの詳細を理解していなくても、高性能のソケットベースのアプリケーション サービスを簡単に開発できるようにすることです。 Workerman 自体は、PHP プロセス管理モジュールとソケット通信モジュールを備えた PHP マルチプロセス サーバー フレームワークであるため、php-fpm、nginx、Apache などのコンテナに依存せずに独立して実行できます。 Workerman には 2 つのプロセス モデルがあります
1. 基本マスター ワーカー モデル
2. マスター ゲートウェイ ワーカー モデル
マスター ワーカー モデルのワークフローとプロセス間の関係は次のとおりです。以下に続きます:マスター ワーカー モデルの説明:
マスター プロセスはメイン プロセスであり、conf 構成は起動プロセス中に読み取られます。各アプリケーションの構成 IP とポートを使用して待機ソケットを作成し、構成内のプロセス数に基づいて、対応する数の子プロセス、つまりワーカー プロセスを作成します。ワーカー プロセスは、作成された待機ソケットを自動的に継承します。これにより、ワーカー プロセスは独立してクライアント接続を受け入れて処理できるようになります。次に、マスター プロセスはシグナル監視ロジックに入り、ワーカー プロセスの終了シグナルをリッスンします (ワーカー プロセスが終了すると、システムは自動的に SIGHCLD シグナルをマスター プロセスに送信し、マスター プロセスは子プロセスを再作成して置き換えます)欠落している子プロセス)、マスター プロセスは、ワーカーマンド スクリプトによって送信される停止信号 (SIGINT) とスムーズな再起動サービス信号 (SIGHUP) もリッスンします。
ワーカー プロセスは、マスターから派生した子プロセスです。各ワーカー プロセスは、クライアント接続を個別に受け入れて処理します。
マスター ワーカー モデルは、単純なビジネス アプリケーションや短い接続アプリケーションに適しています。
マスター ゲートウェイ ワーカー モデルのワークフローとプロセス間の関係は次のとおりです。
マスター ゲートウェイ ワーカー モデルの説明:
このモデルには追加のゲートウェイ プロセス グループがあり、ワークフローは基本的にマスター ワーカーと同じです違いは、ワーカー プロセスがクライアントを直接処理しないことです。クライアントとワーカー プロセスの間に追加のゲートウェイ プロセスがあり、ゲートウェイはネットワーク IO を処理し、クライアントの長い接続を維持します。
マスター ゲートウェイ ワーカー モデルは、長時間接続アプリケーションに非常に適しています
ビジネス コードで swoole と workerman を同期ブロッキング方式で使用する場合、swoole は 2-in-1 nginx に非常によく似ています。 fpm、workerman nginx
とのみ同等です