この記事の内容は swoole のアーキテクチャ解析に関するものであり、一定の参考価値がありますので、困っている方は参考にしていただければ幸いです。
構造図は次のとおりです。
swoole は、主に Master プロセス (メイン プロセス) と Manager プロセスによって使用され、そのプロセスを完了します。機能。
はマルチスレッドプログラムです。 Reactor スレッドと呼ばれる非常に重要なスレッドのグループがあります。実際に TCP 接続を処理し、データを送受信するのはスレッドです。
ワーカー/タスクプロセスを管理します。ワーカー/タスク プロセスはすべてフォークされ、Manager プロセスによって管理されます。
新しい接続を受け入れた後、メイン スレッド (マスター プロセス) は固定の Reactor スレッドに接続を割り当て、このスレッドはソケットの監視を担当します。ソケットが読み取り可能なときにデータを読み取り、プロトコル分析を実行して、リクエストをワーカー プロセスに配信します。
TCP接続の維持、ネットワークの処理
IO、プロトコルの処理、データの送受信
非同期ノンブロッキング モード
Start/
を除くすべては C
コードですシャットダウン イベント コールバックを除き、PHP コードは実行されません
TCP クライアントによって送信されたデータをバッファリングし、結合し、完全なリクエスト データに分割しますパッケージ
Reactorマルチスレッドで実行
Reactor スレッドによって配信されたリクエスト パケットを受け入れ、
PHP コールバック関数を実行してデータを処理します
Reactor スレッドに送信します。このデータは、
Reactor スレッドによって
TCP クライアント
# に送信されます。
マルチプロセス モードで実行します
プロセスによって swoole_server->task/taskwait
メソッドを通じて配信されたタスクを受け入れます
) を Worker
process
マルチプロセス モードで実行する
が nginx
、## であると理解できます。 #Worker は
php-fpm です。
Reactorスレッドはネットワーク要求を非同期かつ並行して処理し、それを処理のために
Workerプロセスに転送します(コールバック関数で処理されます)。
Reactor と
Worker は
UnixSocket を通じて通信します。
#スウール イベント処理プロセスを理解するには、まず 2 つのネットワーク イベント処理モードを理解します。
リアクター モードメイン スレッド (I/O 処理ユニット) は、ファイル記述子にイベントがあるかどうかのみを監視し、イベントがある場合は直ちにワーカー スレッド/プロセスに通知する必要があります。イベントの(論理ユニット)。それ以外、メインスレッドは他の作業を行いません。データの読み取りと書き込み、新しい接続の受け入れ、顧客リクエストの処理はすべてワーカー スレッドで行われます。 プロアクター モード2 つの実装I/O 非同期モデルを使用してプロアクター モードを実装します。原則: すべての I/O 操作はメイン スレッドに渡され、メイン スレッドはカーネルと連携して処理し、ビジネス ロジック操作はロジック ユニットに渡されます。たとえば、これを実現するには aio_read を使用します。 ワークフロー: メインスレッドは、aio_read 関数を呼び出して、ソケット上の読み取り完了イベントをカーネルに登録します。したがって、キューのコンシューマ スレッドはリクエスト オブジェクトを処理し、ソケット上の書き込み準備完了イベントを epoll カーネル イベント テーブルに登録します。
メインスレッドは epoll_wait を呼び出して、ソケットが書き込み可能になるのを待ちます。
ソケットが書き込み可能になると、epoll_wait がメインスレッドに通知します。メインスレッドはリクエスト結果をソケットに書き込みます。
図からわかるように、Reactor スレッドと Work プロセスを組み合わせると、これは、ワーカー スレッドの場合、swoole はリアクター イベント処理モードを使用することがわかります。
リクエストが実行するステップは次のとおりです:
1. サーバーのメインスレッドはクライアントの接続を待ちます。
2. Reactor スレッドは、接続されたソケットを処理し、ソケット上のリクエスト データを読み取り (受信)、リクエストをカプセル化し、ワーク プロセスに渡します。
3. 作業プロセスは、ビジネス データを処理する論理単位です。
4. 作業プロセスの結果は Reactor スレッドに返されます。
5. Reactor スレッドは結果をソケットに書き込みます (送信)。
各モジュールの動作については、上記の構造の紹介を参照してください。
関連する推奨事項:
モデルをカスタマイズするにはどうすればよいですか? ThinkPHP3.2 カスタム基本クラス Model
PHP を使用して Excel ファイルの内容を読み取り、セル データを取得する方法
以上がスウールの構造解析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。