[PHP]swoole_server の複数のプロセス間の分業
[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
- ディレクトリ
- ディレクトリ
- Swooleの紹介
- Swoole: PHPの再定義
- 関数表示コードスニペット
- TCPサーバー
TCPクライアント
- Swooleの紹介
- Swoole公式ウェブサイト
- Swoole: PHPの再定義
<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フレームワークメカニズムの動作を確認するために使用されます。いくつかの機能スレッドが作成されます:メインプロセス分析
- リアクター スレッド: 実際に TCP 接続を処理し、データを送受信するスレッドです。新しい接続を受け入れた後、swoole のメイン スレッドはその接続を固定 Reactor スレッドに割り当て、このスレッドがソケットの監視を担当します。ソケットが読み取り可能なときにデータを読み取り、プロトコル分析を実行して、リクエストをワーカー プロセスに配信します。ソケットが書き込み可能なときに、TCP クライアントにデータを送信します。
- マスター スレッド (メイン スレッド): 新しい接続の受け入れ、UNIX PROXI 信号処理、およびタイマー タスクを担当します。
- ハートビートパケット検出スレッド:(省略)
- UDPパケット受信スレッド:(省略)
swoole内のWorker/Taskプロセスは全てForkされてManagerプロセスによって管理されます。Managerプロセス
- 子プロセスが終了すると、マネージャー プロセスは、ゾンビ プロセスになるのを避けるために子プロセスをリサイクルする責任があります。そして、新しい子プロセスを作成します
- サーバーがシャットダウンすると、マネージャープロセスはすべての子プロセスにシグナルを送信し、子プロセスにサービスを閉じるように通知します
- サーバーがリロードすると、マネージャープロセスは子プロセスを閉じ/再起動します1 つずつ
- なぜ Master プロセスではないのか 主な理由は、Master プロセスがマルチスレッドであり、フォーク操作を安全に実行できないことです。
onWorkerStart
在task进程中也会被调用。当$worker_id >= $serv->setting['worker_num']
ワーカープロセス
タスクプロセス
swoole_server->task/taskwaitメソッドを通じてワーカープロセスから配信されたタスクを受け取りますタスクを処理し、結果データをワーカープロセスに返します
ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

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

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

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

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

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

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

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