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

[PHP]swoole_server几个进程的分工

readme.md—/Users/zjh/Documents/我的文章/[PHP]swoole_server几个进程的分工

[PHP]swoole_server 进程の分工


要旨: Swoole は PHP 语言の高性能ネットワーク通信フレームであり、PHP 语言を提供しています。マルチライン サーバー、TCP/UDP ネットワーク クライアント、MySQL、データベース接続池、AsyncTask、メッセージ列、秒タイマー、ファイル書き込み、DNS クエリ。強力な機能は、明確な分業を伴う複数のプロセスによって実現されます。ここでは、初心者が Swoole フレームワークをより早く理解できるように、いくつかのプロセスの分業について詳しく紹介します。


  • ブログ: http://www.cnblogs.com/jhzhu
  • メール: jhzhuustc@gmail.com
  • 著者: Zhimingso
  • 時間: 2015-08-17

ディレクトリ

  • [PHP]swoole_server プロセスの分業
    • ディレクトリ
    • Swoole の概要
      • Swoole: PHP の再定義
      • 関数デモ コード スニペット
        • TCP サーバー
        • TCP クライアント
    • メインプロセス分析
      • マスタープロセス
      • マネージャープロセス
      • ワーカープロセス
      • タスクプロセス
    • プロセスとイベントコールバックの対応
      • マスタープロセスのコールバック関数
      • ワーカープロセスのコールバック関数
      • タスクプロセス コールバック関数
      • Manager プロセスのコールバック関数

Swoole 紹介

Swoole 公式サイト

Swoole: PHP の再定義

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

機能デモ コード スニペット

TCP サーバー

<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>

TCP クライアント

<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 フレームワークメカニズムの動作を保証するために使用されます。これは、いくつかの機能スレッドを作成します。

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

マネージャープロセス

スウールのワーカー/タスクプロセスは Manager プロセスによってフォークされ、管理されます。

  • 子プロセスが終了すると、マネージャー プロセスは、ゾンビ プロセスになるのを避けるために子プロセスをリサイクルする責任があります。そして、新しいサブプロセスを作成します
  • サーバーがシャットダウンされると、マネージャープロセスはすべてのサブプロセスにシグナルを送信して、サブプロセスにサービスをシャットダウンするように通知します
  • サーバーがリロードされると、マネージャー プロセスはサブプロセスを 1 つずつシャットダウン/再起動します。

なぜマスター プロセスではないのですか? 主な理由は、マスター プロセスがマルチスレッドであるためです。フォーク操作を安全に実行できません。

ワーカープロセス

  • は Reactor スレッドによって配信されたリクエストパケットを受け入れ、PHP コールバック関数を実行してデータを処理します
  • は応答データを生成して送信しますReactor スレッドに送信され、Reactor スレッドによって TCP クライアントに送信されます
  • は、非同期非ブロッキング モードまたは同期ブロッキング モードにすることができます
  • ワーカーはマルチプロセス モードで実行されます

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

タスクプロセス

  • は、swoole_server->task/taskwait メソッドを通じてワーカープロセスによって配信されたタスクを受け取ります
  • はタスクを処理し、結果を返しますdata Worker プロセスの場合
  • 完全同期ブロッキングモードです
  • タスクはマルチプロセスで実行されます

タスクプロセスの正式名は task_worker プロセスです、これは特殊な種類のワーカー プロセスです。したがって、 onWorkerStart もタスクプロセス内で呼び出されます。 $worker_id >= $serv->setting['worker_num'] の場合はこのプロセスが task_worker であることを意味し、それ以外の場合はこのプロセスがワーカープロセスであることを意味します。

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

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

<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>

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

<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>

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

<span class="x">onTask</span><span class="x">onWorkerStart</span>

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

<span class="x">onManagerStart</span><span class="x">onManagerStop</span>
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Vue3怎么解析markdown并实现代码高亮显示Vue3怎么解析markdown并实现代码高亮显示May 20, 2023 pm 04:16 PM

Vue实现博客前端,需要实现markdown的解析,如果有代码则需要实现代码的高亮。Vue的markdown解析库有很多,如markdown-it、vue-markdown-loader、marked、vue-markdown等。这些库都大同小异。这里选用的是marked,代码高亮的库选用的是highlight.js。具体实现步骤如下:一、安装依赖库在vue项目下打开命令窗口,并输入以下命令npminstallmarked-save//marked用于将markdown转换成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*fro

Python之Pygame的Font模块——如何使用文本和字体?Python之Pygame的Font模块——如何使用文本和字体?Apr 23, 2023 pm 11:19 PM

Pygame的Font文本和字体Pygame通过pygame.font模块来创建一个字体对象,从而实现绘制文本的目的。该模块的常用方法如下所示:名称说明pygame.font.init()初始化字体模块pygame.font.quit()取消初始化字体模块pygame.font.get_init()检查字体模块是否被初始化,返回一个布尔值。pygame.font.get_default_font()获得默认字体的文件名。返回系统中字体的文件名pygame.font.get_fonts()获取所有

聊聊VScode怎么配置Markdown(附基础语法)聊聊VScode怎么配置Markdown(附基础语法)Dec 07, 2022 pm 03:40 PM

VScode中怎么使用markdown?下面本篇文章给大家介绍一下VScode配置Markdown的方法,并聊聊Markdown基础语法,希望对大家有所帮助!

怎么用PHP实现markdown转换怎么用PHP实现markdown转换Mar 24, 2023 pm 02:30 PM

随着人们对于技术的不断追求,越来越多的工具和应用程序被开发出来来帮助人们简化复杂的任务。其中之一就是 Markdown,它是一种轻量级的标记语言,可以将纯文本转换成 HTML 格式的文本。本文将介绍如何使用 PHP 来实现 Markdown 转换。

如何在ThinkPHP6中使用Markdown如何在ThinkPHP6中使用MarkdownJun 20, 2023 pm 11:00 PM

在现代互联网时代的开发中,文档撰写已经逐渐从繁琐的HTML标签转变为更为简单且便于读写的Markdown语法。ThinkPHP6使用了高度灵活的模板引擎,提供了方便的Markdown扩展,使得在项目中使用Markdown文件编写和显示变得十分容易。什么是MarkdownMarkdown是一种轻量级的标记语言,可快速将纯文本编写的文档转化为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

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

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

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

メモ帳++7.3.1

メモ帳++7.3.1

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

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。