Jadual Kandungan
[PHP]swoole_server进程的分工
目录
Swoole简介
Swoole:重新定义PHP
功能展示代码片段
TCP Server
TCP Client
主要进程分析
Master进程
Manager进程
Worker进程
Task进程
进程与事件回调的对应关系
Master进程内的回调函数
Worker进程内的回调函数
Task进程内的回调函数
Manager进程内的回调函数
Rumah pembangunan bahagian belakang tutorial php [PHP]swoole_server几个过程的分工

[PHP]swoole_server几个过程的分工

Jun 13, 2016 pm 12:24 PM
body color font markdown

[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
  • 作者: 知明所以
  • 时间: 2015-08-17

目录

  • [PHP]swoole_server进程的分工
    • 目录
    • Swoole简介
      • Swoole:重新定义PHP
      • 功能展示代码片段
        • TCP Server
        • TCP Client
    • 主要进程分析
      • Master进程
      • Manager进程
      • Worker进程
      • Task进程
    • 进程与事件回调的对应关系
      • Master进程内的回调函数
      • Worker进程内的回调函数
      • Task进程内的回调函数
      • Manager进程内的回调函数

Swoole简介

Swoole官网

Swoole:重新定义PHP

Swoole:PHP语言的高性能网络通信框架,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。Swoole虽然是标准的PHP扩展,实际上与普通的扩展不同。普通的扩展只是提供一个库函数。而swoole扩展在运行后会接管PHP的控制权,进入事件循环。当IO事件发生后,swoole会自动回调指定的PHP函数。

功能展示代码片段

TCP Server

<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>
Salin selepas log masuk

TCP Client

<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>
Salin selepas log masuk

更多代码片段请见swoole官网。

主要进程分析

Master进程

Master进程主要用来保证Swoole框架机制的运行。它会创建几个功能性的线程:

  • Reactor线程:就是真正处理TCP连接,收发数据的线程。swoole的主线程在Accept新的连接后,会将这个连接分配给一个固定的Reactor线程,并由这个线程负责监听此socket。在socket可读时读取数据,并进行协议解析,将请求投递到Worker进程。在socket可写时将数据发送给TCP客户端。
  • Master线程(主线程): 负责:Accept新的连接、UNIX PROXI信号处理、定时器任务。
  • 心跳包检测线程:(略)
  • UDP收包线程:(略)

Manager进程

swoole中Worker/Task进程都是由Manager进程Fork并管理的。

  • 子进程结束运行时,manager进程负责回收此子进程,避免成为僵尸进程。并创建新的子进程
  • 服务器关闭时,manager进程将发送信号给所有子进程,通知子进程关闭服务
  • 服务器reload时,manager进程会逐个关闭/重启子进程

为什么不是Master进程呢,主要原因是Master进程是多线程的,不能安全的执行fork操作。

Worker进程

  • 接受由Reactor线程投递的请求数据包,并执行PHP回调函数处理数据
  • 生成响应数据并发给Reactor线程,由Reactor线程发送给TCP客户端
  • 可以是异步非阻塞模式,也可以是同步阻塞模式
  • Worker以多进程的方式运行

Swoole提供了完善的进程管理机制,当Worker进程异常退出,如发生PHP的致命错误、被其他程序误杀,或达到max_request次数之后正常退出。主进程会重新拉起新的Worker进程。 Worker进程内可以像普通的apache+php或者php-fpm中写代码。不需要像Node.js那样写异步回调的代码。

Task进程

  • 接受由Worker进程通过swoole_server->task/taskwait方法投递的任务
  • 处理任务,并将结果数据返回给Worker进程
  • 完全是同步阻塞模式
  • Task以多进程的方式运行

Task进程的全称是task_worker进程,是一种特殊的worker进程。所以onWorkerStart在task进程中也会被调用。当$worker_id >= $serv->setting['worker_num']时表示这个进程是task_worker,否则,代表此进程是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>
Salin selepas log masuk

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>
Salin selepas log masuk

Task进程内的回调函数

<span class="x">onTask</span><span class="x">onWorkerStart</span>
Salin selepas log masuk

Manager进程内的回调函数

<span class="x">onManagerStart</span><span class="x">onManagerStop</span>
Salin selepas log masuk
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara Vue3 menghuraikan penurunan harga dan melaksanakan penyerlahan kod Cara Vue3 menghuraikan penurunan harga dan melaksanakan penyerlahan kod May 20, 2023 pm 04:16 PM

Vue melaksanakan bahagian hadapan blog dan perlu melaksanakan penghuraian markdown Jika terdapat kod, ia perlu melaksanakan penyerlahan kod. Terdapat banyak pustaka parsing markdown untuk Vue, seperti markdown-it, vue-markdown-loader, marked, vue-markdown, dsb. Perpustakaan ini semuanya sangat serupa. Ditanda digunakan di sini, dan highlight.js digunakan sebagai pustaka penonjolan kod. Langkah-langkah pelaksanaan khusus adalah seperti berikut: 1. Pasang perpustakaan bergantung Buka tetingkap arahan di bawah projek vue dan masukkan arahan berikut npminstallmarked-save//marked untuk menukar markdown ke htmlnpmins.

Bagaimana untuk membina editor Markdown dalam Python Bagaimana untuk membina editor Markdown dalam Python May 13, 2023 am 09:58 AM

Mula-mula, pastikan anda memasang Python3 dan Tkinter. Perkara lain yang kami perlukan ialah tkhtmlview dan markdown2. Anda boleh memasangnya dengan menjalankan pipinstalltkhtmlviewmarkdown2 atau pip3installtkhtmlviewmarkdown2 (jika anda mempunyai berbilang versi Python). Sekarang lancarkan editor atau IDE kegemaran anda dan buat fail baharu (contohnya www.linuxidc.com.py (saya namakannya editor linuxidc.com)). Kami akan mulakan dengan mengimport perpustakaan yang diperlukan. fromtkinterimport*fro

Mari bercakap tentang cara mengkonfigurasi Markdown dalam VScode (dengan sintaks asas) Mari bercakap tentang cara mengkonfigurasi Markdown dalam VScode (dengan sintaks asas) Dec 07, 2022 pm 03:40 PM

Bagaimana untuk menggunakan penurunan harga dalam VScode? Artikel berikut akan memperkenalkan anda kepada kaedah mengkonfigurasi Markdown dalam VScode, dan bercakap tentang sintaks asas Markdown saya harap ia akan membantu anda!

Modul Font Pygame Python - bagaimana untuk menggunakan teks dan fon? Modul Font Pygame Python - bagaimana untuk menggunakan teks dan fon? Apr 23, 2023 pm 11:19 PM

Teks fon dan fon Pygame Pygame menggunakan modul pygame.font untuk mencipta objek fon untuk mencapai tujuan melukis teks. Kaedah yang biasa digunakan bagi modul ini adalah seperti berikut: Nama Penerangan pygame.font.init() Mulakan modul fon pygame.font.quit() Nyahinisialkan modul fon pygame.font.get_init() Semak sama ada modul fon telah dimulakan dan kembalikan nilai Boolean . pygame.font.get_default_font() mendapat nama fail fon lalai. Mengembalikan nama fail fon dalam sistem pygame.font.get_fonts() mendapat semua

Cara menggunakan PHP untuk melaksanakan penukaran markdown Cara menggunakan PHP untuk melaksanakan penukaran markdown Mar 24, 2023 pm 02:30 PM

Apabila orang ramai terus mengejar teknologi, semakin banyak alat dan aplikasi dibangunkan untuk membantu orang ramai memudahkan tugas yang rumit. Salah satunya ialah Markdown, iaitu bahasa penanda ringan yang menukar teks biasa kepada teks berformat HTML. Artikel ini akan memperkenalkan cara menggunakan PHP untuk melaksanakan penukaran Markdown.

Cara menggunakan Markdown dalam ThinkPHP6 Cara menggunakan Markdown dalam ThinkPHP6 Jun 20, 2023 pm 11:00 PM

Dalam perkembangan era Internet moden, penulisan dokumen telah berubah secara beransur-ansur daripada tag HTML yang menyusahkan kepada sintaks Markdown yang lebih ringkas dan mudah untuk dibaca dan ditulis. ThinkPHP6 menggunakan enjin templat yang sangat fleksibel dan menyediakan sambungan Markdown yang mudah, menjadikannya sangat mudah untuk menulis dan memaparkan fail Markdown dalam projek. Apa itu Markdown Markdown ialah bahasa penanda ringan yang boleh menukar dokumen yang ditulis dalam teks biasa ke dalam HTML dengan cepat untuk digunakan dalam

Selepas menggunakan arahan Linux ini, bos saya terus meletakkan nama saya dalam senarai kenaikan gaji. Selepas menggunakan arahan Linux ini, bos saya terus meletakkan nama saya dalam senarai kenaikan gaji. Feb 27, 2024 pm 08:49 PM

Gambaran Keseluruhan Dalam sistem Linux, kami kerap menggunakan baris arahan untuk memproses fail dan direktori. Markdown ialah bahasa markup yang ringkas untuk membuat dan memformat dokumen dengan cepat. Tetapi membaca dan mengurus fail Markdown mungkin memerlukan sejumlah besar arahan dan parameter, yang mungkin agak rumit untuk pemula. Pada masa ini, anda boleh menggunakan arahan glow untuk memudahkan operasi. glow ialah alat baris arahan yang direka untuk memudahkan pemaparan fail Markdown dalam terminal Linux. Matlamat utamanya adalah untuk menyediakan pengguna dengan pengalaman membaca fail Markdown yang lebih intuitif dan terurus. glow datang dengan antara muka grafik mesra pengguna yang membolehkan anda melihat dan mengurus fail Markdown dengan lebih mudah. Dengan antara muka ini, anda tidak perlu ingat

Lembaran tipu Markdown yang mesti ada untuk pengaturcara! Lembaran tipu Markdown yang mesti ada untuk pengaturcara! Feb 16, 2023 am 11:22 AM

Artikel ini membawakan anda pengetahuan yang berkaitan tentang Markdown Kandungan utama adalah untuk meringkaskan dan berkongsi dengan anda helaian tipu Markdown. Rakan-rakan yang berminat boleh melihatnya di bawah.

See all articles