ホームページ バックエンド開発 PHPチュートリアル [PHP]swoole_server の複数のプロセス間の分業

[PHP]swoole_server の複数のプロセス間の分業

Jul 30, 2016 pm 01:30 PM
body color font markdown

[PHP]swoole_server进程の分工


要約: Swoole は、PHP 言語の高性能ネットワーク通信フレームワークであり、PHP 言語の非同期マルチスレッド サーバー、非同期 TCP/UDP ネットワーク クライアント、非同期 MySQL、データベース接続プール、AsyncTask、メッセージ キュー、ミリ秒タイマー、非同期ファイルの読み取りと書き込み、非同期 DNS クエリ。強力な機能は、明確な分業を伴う複数のプロセスによって実現されます。ここでは、初心者が Swoole フレームワークをより早く理解できるように、いくつかのプロセスの分業について詳しく紹介します。 Pブログ:http://www.cnblogs.com/jhzhu


メールボックス:jhzhuustc@gmail.com
  • 著者:Zhiming So時間:2015-08-17
  • ディレクトリ

    • [PHP] swoole_serverプロセスの分業
      • ディレクトリ
      • Swooleの紹介
      • Swoole: PHPの再定義
      • 関数表示コードスニペット
      • TCPサーバー
    • TCPクライアント

メインプロセス分析

マスタープロセス

マネージャープロセス

ワーカープロセス

タスクプロセス

プロセスとイベントコールバックの対応関係

Masterプロセスのコールバック関数

Workerプロセスのコールバック関数

Taskプロセスのコールバック関数

Managerプロセスのコールバック関数

  • Swooleの紹介
  • Swoole公式ウェブサイト
  • Swoole: PHPの再定義
Swoole: PHP言語用の高性能ネットワーク通信フレームワークで、PHP言語の非同期マルチスレッドサーバー、非同期TCP/UDPネットワーククライアント、非同期MySQL、データベース接続プール、AsyncTask、メッセージ キュー、ミリ秒タイマー、非同期ファイルの読み取りと書き込み、非同期 DNS クエリ。 Swoole は標準的な PHP 拡張機能ですが、実は通常の拡張機能とは異なります。通常の拡張機能はライブラリ関数を提供するだけです。 swoole 拡張機能は、実行後に PHP の制御を引き継ぎ、イベント ループに入ります。 IO イベントが発生すると、swoole は指定された PHP 関数を自動的にコールバックします。

関数表示コードスニペット

TCPサーバー
  • <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>
    ログイン後にコピー
  • TCPクライアント
  • <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>
    ログイン後にコピー
その他のコードスニペットについては、swoole公式Webサイトをご覧ください。

メインプロセス分析

マスタープロセス

マスタープロセスは主に、Swooleフレームワークメカニズムの動作を確認するために使用されます。いくつかの機能スレッドが作成されます:
  • リアクター スレッド: 実際に TCP 接続を処理し、データを送受信するスレッドです。新しい接続を受け入れた後、swoole のメイン スレッドはその接続を固定 Reactor スレッドに割り当て、このスレッドがソケットの監視を担当します。ソケットが読み取り可能なときにデータを読み取り、プロトコル分析を実行して、リクエストをワーカー プロセスに配信します。ソケットが書き込み可能なときに、TCP クライアントにデータを送信します。
  • マスター スレッド (メイン スレッド): 新しい接続の受け入れ、UNIX PROXI 信号処理、およびタイマー タスクを担当します。
  • ハートビートパケット検出スレッド:(省略)
  • UDPパケット受信スレッド:(省略)

Managerプロセス

swoole内のWorker/Taskプロセスは全てForkされてManagerプロセスによって管理されます。

    子プロセスが終了すると、マネージャー プロセスは、ゾンビ プロセスになるのを避けるために子プロセスをリサイクルする責任があります。そして、新しい子プロセスを作成します
  • サーバーがシャットダウンすると、マネージャープロセスはすべての子プロセスにシグナルを送信し、子プロセスにサービスを閉じるように通知します
  • サーバーがリロードすると、マネージャープロセスは子プロセスを閉じ/再起動します1 つずつ
  • なぜ Master プロセスではないのか 主な理由は、Master プロセスがマルチスレッドであり、フォーク操作を安全に実行できないことです。

onWorkerStart在task进程中也会被调用。当$worker_id >= $serv->setting['worker_num']ワーカープロセス

Reactor スレッドによって配信されたリクエストパケットを受け取り、PHP コールバック関数を実行してデータを処理します

応答データを生成して Reactor スレッドに送信し、TCP クライアントに送信します

非同期および非ブロッキング モードにすることも、同期ブロッキング モードにすることもできます

ワーカーはマルチプロセス モードで実行されます

ワーカー プロセスが致命的なエラーなどで異常終了した場合、Swoole は完全なプロセス管理メカニズムを提供します。 PHP では、他のプログラムによって誤って強制終了されたか、max_request 回後に正常に終了しました。メインプロセスは新しいワーカープロセスを再起動します。通常のapache+phpやphp-fpmと同様にワーカープロセス内でコードを記述できます。 Node.js のような非同期コールバック コードを記述する必要はありません。

タスクプロセス

swoole_server->task/taskwaitメソッドを通じてワーカープロセスから配信されたタスクを受け取りますタスクを処理し、結果データをワーカープロセスに返します
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Vue3 がマークダウンを解析し、コードのハイライトを実装する方法 Vue3 がマークダウンを解析し、コードのハイライトを実装する方法 May 20, 2023 pm 04:16 PM

Vue はブログ フロントエンドを実装しており、マークダウン解析を実装する必要があり、コードがある場合はコードのハイライトを実装する必要があります。 Vue には、markdown-it、vue-markdown-loader、marked、vue-markdown など、マークダウン解析ライブラリが多数あります。これらのライブラリはすべて非常に似ています。ここではMarkedが使用され、コード強調表示ライブラリとしてhighlight.jsが使用されます。 1. 依存ライブラリをインストールする vue プロジェクトの下でコマンド ウィンドウを開き、次のコマンド npminstallmarked-save//marked を入力して、マークダウンを htmlnpmins に変換します。

Python で Markdown エディターを構築する方法 Python で Markdown エディターを構築する方法 May 13, 2023 am 09:58 AM

まず、Python3 と Tkinter がインストールされていることを確認します。他に必要なものは tkhtmlview と markdown2 です。これらは、pipinstalltkhtmlviewmarkdown2 または pip3installtkhtmlviewmarkdown2 (複数の Python バージョンがある場合) を実行してインストールできます。次に、お気に入りのエディターまたは IDE を起動し、新しいファイル (たとえば、www.linuxidc.com.py (linuxidc.com エディターという名前を付けました)) を作成します。まず、必要なライブラリをインポートします。 fromtkinterimport*から

VScode で Markdown を構成する方法について話しましょう (基本的な構文を使用) VScode で Markdown を構成する方法について話しましょう (基本的な構文を使用) Dec 07, 2022 pm 03:40 PM

VScodeでマークダウンを使用するにはどうすればよいですか?以下の記事では、VScode で Markdown を設定する方法と、Markdown の基本的な構文について説明します。

Python の Pygame Font モジュール - テキストとフォントの使用方法? Python の Pygame Font モジュール - テキストとフォントの使用方法? Apr 23, 2023 pm 11:19 PM

Pygame のフォント テキストとフォント Pygame は、pygame.font モジュールを使用してフォント オブジェクトを作成し、テキストを描画するという目的を達成します。このモジュールの一般的に使用されるメソッドは次のとおりです。 名前 説明 pygame.font.init() フォント モジュールの初期化 pygame.font.quit() フォント モジュールの初期化解除 pygame.font.get_init() フォント モジュールが初期化されているかどうかを確認し、ブール値を返します。 pygame.font.get_default_font() は、デフォルトのフォントのファイル名を取得します。システム内のフォントのファイル名を返します pygame.font.get_fonts() はすべてを取得します

PHP を使用してマークダウン変換を実装する方法 PHP を使用してマークダウン変換を実装する方法 Mar 24, 2023 pm 02:30 PM

人々がテクノロジーを追求し続けるにつれて、人々が複雑なタスクを簡素化するのに役立つツールやアプリケーションがますます開発されています。その 1 つは Markdown です。これは、プレーン テキストを HTML 形式のテキストに変換する軽量のマークアップ言語です。この記事では、PHPを使用してMarkdown変換を実装する方法を紹介します。

ThinkPHP6 で Markdown を使用する方法 ThinkPHP6 で Markdown を使用する方法 Jun 20, 2023 pm 11:00 PM

現代のインターネット時代の発展の中で、ドキュメントの作成は、煩雑な HTML タグから、よりシンプルで読み書きが容易な Markdown 構文に徐々に変化してきました。 ThinkPHP6 は、柔軟性の高いテンプレート エンジンを使用し、便利な Markdown 拡張機能を提供しているため、プロジェクト内で Markdown ファイルを作成および表示することが非常に簡単になります。 Markdown とは Markdown は、プレーン テキストで書かれたドキュメントを HTML にすばやく変換して、さまざまな用途に使用できる軽量のマークアップ言語です。

この Linux コマンドを使用した後、上司は直接私の名前を昇給リストに載せました。 この Linux コマンドを使用した後、上司は直接私の名前を昇給リストに載せました。 Feb 27, 2024 pm 08:49 PM

概要 Linux システムでは、ファイルやディレクトリを処理するためにコマンド ラインを頻繁に使用します。 Markdown は、ドキュメントを迅速に作成してフォーマットするための簡潔なマークアップ言語です。ただし、Markdown ファイルの読み取りと管理には多数のコマンドとパラメーターが必要になる場合があり、初心者にとっては少し複雑かもしれません。このとき、glowコマンドを使用すると操作が簡単になります。 glow は、Linux ターミナルでの Markdown ファイルのレンダリングを簡素化するために設計されたコマンド ライン ツールです。その主な目標は、より直感的で管理しやすい Markdown ファイルの読み取りエクスペリエンスをユーザーに提供することです。 Glow には、Markdown ファイルをより簡単に表示および管理できる、ユーザーフレンドリーなグラフィカル インターフェイスが付属しています。このインターフェースを使用すると、覚える必要はありません

プログラマー必携の Markdown チートシート! プログラマー必携の Markdown チートシート! Feb 16, 2023 am 11:22 AM

この記事では、Markdown に関する関連知識をお届けします。主な内容は、Markdown のチートシートを要約して共有することです。興味のある友人は以下を参照してください。皆さんのお役に立てれば幸いです。

See all articles