最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

你對(duì)swoole的進(jìn)程,線程知道多少

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 13:59:31
文檔

你對(duì)swoole的進(jìn)程,線程知道多少

你對(duì)swoole的進(jìn)程,線程知道多少:swoole教程欄目介紹swoole的進(jìn)程,線程。推薦(免費(fèi)):swoole教程進(jìn)程1、進(jìn)程之間不共享任何狀態(tài) 2、進(jìn)程的調(diào)度由操作系統(tǒng)完成 3、每個(gè)進(jìn)程都有自己獨(dú)立的內(nèi)存空間 4、進(jìn)程間通訊主要是通過(guò)信號(hào)傳遞的方式來(lái)實(shí)現(xiàn)的,實(shí)現(xiàn)方式有多種,信號(hào)量、管道、事件等,
推薦度:
導(dǎo)讀你對(duì)swoole的進(jìn)程,線程知道多少:swoole教程欄目介紹swoole的進(jìn)程,線程。推薦(免費(fèi)):swoole教程進(jìn)程1、進(jìn)程之間不共享任何狀態(tài) 2、進(jìn)程的調(diào)度由操作系統(tǒng)完成 3、每個(gè)進(jìn)程都有自己獨(dú)立的內(nèi)存空間 4、進(jìn)程間通訊主要是通過(guò)信號(hào)傳遞的方式來(lái)實(shí)現(xiàn)的,實(shí)現(xiàn)方式有多種,信號(hào)量、管道、事件等,

swoole教程欄目介紹swoole的進(jìn)程,線程。

推薦(免費(fèi)):swoole教程
進(jìn)程

1、進(jìn)程之間不共享任何狀態(tài)
2、進(jìn)程的調(diào)度由操作系統(tǒng)完成
3、每個(gè)進(jìn)程都有自己獨(dú)立的內(nèi)存空間
4、進(jìn)程間通訊主要是通過(guò)信號(hào)傳遞的方式來(lái)實(shí)現(xiàn)的,實(shí)現(xiàn)方式有多種,信號(hào)量、管道、事件等,任何一種方式的通訊效率都需要過(guò)內(nèi)核,導(dǎo)致通訊效率比較低
5、由于是獨(dú)立的內(nèi)存空間,上下文切換的時(shí)候需要保存先調(diào)用棧的信息、cpu各寄存器的信息、虛擬內(nèi)存、以及打開(kāi)的相關(guān)句柄等信息,所以導(dǎo)致上下文進(jìn)程間切換開(kāi)銷很大,通訊麻煩。

線程

1、線程之間共享變量,解決了通訊麻煩的問(wèn)題對(duì)于變量的訪問(wèn)需要鎖
2、一個(gè)進(jìn)程可以擁有多個(gè)線程,但是其中每個(gè)線程會(huì)共享父進(jìn)程像操作系統(tǒng)申請(qǐng)資源,這個(gè)包括虛擬內(nèi)存、文件等,由于是共享資源,所以創(chuàng)建線程所需要的系統(tǒng)資源占用比進(jìn)程小很多,相應(yīng)的可創(chuàng)建的線程數(shù)量也變得相對(duì)多很多。
3、另外在調(diào)度方面也是由于內(nèi)存是共享的,所以上下文切換的時(shí)候需要保存的東西就像對(duì)少一些,這樣一來(lái)上下文的切換也變得高效。

解釋
  • 通過(guò)php,運(yùn)行一個(gè)php文件,這個(gè)時(shí)候就相當(dāng)于我們創(chuàng)建了一個(gè)進(jìn)程,這個(gè)進(jìn)程會(huì)在系統(tǒng)中駐存,申請(qǐng)屬于它自己的內(nèi)存空間系統(tǒng)資源并且運(yùn)行相應(yīng)的程序。
    在這里插入圖片描述
  • swoole進(jìn)程

    在這里插入圖片描述
    1、Master進(jìn)程:主進(jìn)程
    2、Manger進(jìn)程:管理進(jìn)程
    3、Worker進(jìn)程:工作進(jìn)程
    4、Task進(jìn)程:異步任務(wù)工作進(jìn)程

  • 第一層,Master進(jìn)程,這個(gè)是swoole的主進(jìn)程,這個(gè)進(jìn)程是用于處理swoole的核心事件驅(qū)動(dòng)的,那么在這個(gè)進(jìn)程當(dāng)中可以看到它擁有一個(gè)MainReactor[線程]以及若干個(gè)Reactor[線程],swoole所有對(duì)于事件的監(jiān)聽(tīng)都會(huì)在這些線程中實(shí)現(xiàn),比如來(lái)自客戶端的連接,信號(hào)處理等。

  • 1.1、MainReactor(主線程)
    主線程會(huì)負(fù)責(zé)監(jiān)聽(tīng)server socket,如果有新的連接accept,主線程會(huì)評(píng)估每個(gè)Reactor線程的連接數(shù)量。將此連接分配給連接數(shù)最少的reactor線程,做一個(gè)負(fù)載均衡。

  • 1.2 、Reactor線程組
    Reactor線程負(fù)責(zé)維護(hù)客戶端機(jī)器的TCP連接、處理網(wǎng)絡(luò)IO、收發(fā)數(shù)據(jù)完全是異步非阻塞的模式。
    swoole的主線程在Accept新的連接后,會(huì)將這個(gè)連接分配給一個(gè)固定的Reactor線程,在socket可讀時(shí)讀取數(shù)據(jù),并進(jìn)行協(xié)議解析,將請(qǐng)求投遞到Worker進(jìn)程。在socket可寫(xiě)時(shí)將數(shù)據(jù)發(fā)送給TCP客戶端。

  • 1.3、心跳包檢測(cè)線程(HeartbeatCheck)
    Swoole配置了心跳檢測(cè)之后,心跳包線程會(huì)在固定時(shí)間內(nèi)對(duì)所有之前在線的連接
    發(fā)送檢測(cè)數(shù)據(jù)包

  • 1.4、UDP收包線程(UdpRecv)
    接收并且處理客戶端udp數(shù)據(jù)包

  • swoole想要實(shí)現(xiàn)最好的性能必須創(chuàng)建出多個(gè)工作進(jìn)程幫助處理任務(wù),但Worker進(jìn)程就必須fork操作,但是fork操作是不安全的,如果沒(méi)有管理會(huì)出現(xiàn)很多的僵尸進(jìn)程,進(jìn)而影響服務(wù)器性能,同時(shí)worker進(jìn)程被誤殺或者由于程序的原因會(huì)異常退出,為了保證服務(wù)的穩(wěn)定性,需要重新創(chuàng)建worker進(jìn)程。

  • Swoole在運(yùn)行中會(huì)創(chuàng)建一個(gè)單獨(dú)的管理進(jìn)程,所有的worker進(jìn)程和task進(jìn)程都是從管理進(jìn)程Fork出來(lái)的。管理進(jìn)程會(huì)監(jiān)視所有子進(jìn)程的退出事件,當(dāng)worker進(jìn)程發(fā)生致命錯(cuò)誤或者運(yùn)行生命周期結(jié)束時(shí),管理進(jìn)程會(huì)回收此進(jìn)程,并創(chuàng)建新的進(jìn)程。換句話也就是說(shuō),對(duì)于worker、task進(jìn)程的創(chuàng)建、回收等操作全權(quán)有“保姆”Manager進(jìn)程進(jìn)行管理

  • worker 進(jìn)程屬于swoole的主邏輯進(jìn)程,用戶處理客戶端的一系列請(qǐng)求,接受由Reactor線程投遞的請(qǐng)求數(shù)據(jù)包,并執(zhí)行PHP回調(diào)函數(shù)處理數(shù)據(jù)生成響應(yīng)數(shù)據(jù)并發(fā)給Reactor線程,由Reactor線程發(fā)送給TCP客戶端可以是異步非阻塞模式,也可以是同步阻塞模式

  • taskWorker進(jìn)程這一進(jìn)城是swoole提供的異步工作進(jìn)程,這些進(jìn)程主要用于處理一些耗時(shí)較長(zhǎng)的同步任務(wù),在worker進(jìn)程當(dāng)中投遞過(guò)來(lái)。

  • client跟server的交互:

    1、client請(qǐng)求到達(dá) Main Reactor,Client實(shí)際上是與Master進(jìn)程中的某個(gè)Reactor線程發(fā)生了連接。

    2、Main Reactor根據(jù)Reactor的情況,將請(qǐng)求注冊(cè)給對(duì)應(yīng)的Reactor (每個(gè)Reactor都有epoll。用來(lái)監(jiān)聽(tīng)客戶端的變化)

    3、客戶端有變化時(shí)Reactor將數(shù)據(jù)交給worker來(lái)處理

    4、worker處理完畢,通過(guò)進(jìn)程間通信(比如管道、共享內(nèi)存、消息隊(duì)列)發(fā)給對(duì)應(yīng)的reactor。

    5、reactor將響應(yīng)結(jié)果發(fā)給相應(yīng)的連接請(qǐng)求處理完成

    Master進(jìn)程內(nèi)的回調(diào)函數(shù)
  • onStart Server啟動(dòng)在主進(jìn)程的主線程回調(diào)此函數(shù)
  • onShutdown 此事件在Server正常結(jié)束時(shí)發(fā)生
  • Manager進(jìn)程內(nèi)的回調(diào)函數(shù)
  • onManagerStart 當(dāng)管理進(jìn)程啟動(dòng)時(shí)調(diào)用它
  • onManagerStop 當(dāng)管理進(jìn)程結(jié)束時(shí)調(diào)用它
  • onWorkerError 當(dāng)worker/task_worker進(jìn)程發(fā)生異常后會(huì)在Manager進(jìn)程內(nèi)回調(diào)此函數(shù)
  • Worker進(jìn)程內(nèi)的回調(diào)函數(shù)
  • onWorkerStart 此事件在Worker進(jìn)程/Task進(jìn)程啟動(dòng)時(shí)發(fā)生
  • onWorkerStop 此事件在worker進(jìn)程終止時(shí)發(fā)生。
  • onConnect 有新的連接進(jìn)入時(shí),在worker進(jìn)程中回調(diào)
  • onClose TCP客戶端連接關(guān)閉后,在worker進(jìn)程中回調(diào)此函數(shù)
  • onReceive 接收到數(shù)據(jù)時(shí)回調(diào)此函數(shù),發(fā)生在worker進(jìn)程中
  • onPacket 接收到UDP數(shù)據(jù)包時(shí)回調(diào)此函數(shù),發(fā)生在worker進(jìn)程中
  • onFinish 當(dāng)worker進(jìn)程投遞的任務(wù)在task_worker中完成時(shí),task進(jìn)程會(huì)通過(guò)finish()方法將任務(wù)處理的結(jié)果發(fā)送給worker進(jìn)程。
  • onWorkerExit 僅在開(kāi)啟reload_async特性后有效。異步重啟特性
  • onPipeMessage 當(dāng)工作進(jìn)程收到由 sendMessage 發(fā)送的管道消息時(shí)會(huì)觸發(fā)事件
  • Task進(jìn)程內(nèi)的回調(diào)函數(shù)
  • onTask 在task_worker進(jìn)程內(nèi)被調(diào)用。worker進(jìn)程可以使用swoole_server_task函數(shù)向task_worker進(jìn)程投遞新的任務(wù)
  • onWorkerStart 此事件在Worker進(jìn)程/Task進(jìn)程啟動(dòng)時(shí)發(fā)生
  • onPipeMessage 當(dāng)工作進(jìn)程收到由 sendMessage 發(fā)送的管道消息時(shí)會(huì)觸發(fā)事件
  • 簡(jiǎn)單說(shuō)明:
  • 1、服務(wù)器關(guān)閉程序終止時(shí)最后一次事件是onShutdown。
  • 2、服務(wù)器啟動(dòng)成功后,onStart/onManagerStart/onWorkerStart會(huì)在不同的進(jìn)程內(nèi)并發(fā)執(zhí)行,并不是順序的。
  • 3、所有事件回調(diào)均在$server->start后發(fā)生,start之后寫(xiě)的代碼是無(wú)效代碼。
  • 4、onStart/onManagerStart/onWorkerStart 3個(gè)事件的執(zhí)行順序是不確定的
  • swoole運(yùn)行流程圖

    在這里插入圖片描述

    <?php//tcp協(xié)議$server=new Swoole\Server("0.0.0.0",9800); //創(chuàng)建server對(duì)象$server->set([
     'worker_num'=>3, //設(shè)置進(jìn)程
     //'heartbeat_idle_time'=>10,//連接最大的空閑時(shí)間
     //'heartbeat_check_interval'=>3 //服務(wù)器定時(shí)檢查
     'open_length_check'=>1,
     'package_length_type'=>'N',//設(shè)置包頭的長(zhǎng)度
     'package_length_offset'=>0, //包長(zhǎng)度從哪里開(kāi)始計(jì)算
     'package_body_offset'=>4, //包體從第幾個(gè)字節(jié)開(kāi)始計(jì)算
     'package_max_length'=>1024 * 1024 * 2,]);$server->on("Start",function (){
    
     var_dump(1);
     //設(shè)置主進(jìn)程的名稱
     swoole_set_process_name("server-process:master");});//服務(wù)關(guān)閉時(shí)候觸發(fā)(信號(hào))$server->on("shutdown",function (){});//當(dāng)管理進(jìn)程啟動(dòng)時(shí)調(diào)用它$server->on('ManagerStart',function (){
     var_dump(2);
     //swoole_set_process_name("server-process:manger");});$server->on('WorkerStart',function ($server,$workerId){
     // swoole_set_process_name("server-process:worker");
     var_dump(3);});//監(jiān)聽(tīng)事件,連接事件(woker進(jìn)程當(dāng)中)$server->on('connect',function ($server,$fd){
     echo "新的連接進(jìn)入:{$fd}".PHP_EOL;});//消息發(fā)送過(guò)來(lái)(woker進(jìn)程當(dāng)中)$server->on('receive',function (swoole_server $server, int $fd, int $reactor_id, string $data){
     //var_dump("消息發(fā)送過(guò)來(lái):".$data);
     //服務(wù)端});//消息關(guān)閉$server->on('close',function (){
     echo "消息關(guān)閉".PHP_EOL;});//服務(wù)器開(kāi)啟$server->start();echo '123456';
    進(jìn)程

    1、進(jìn)程之間不共享任何狀態(tài)
    2、進(jìn)程的調(diào)度由操作系統(tǒng)完成
    3、每個(gè)進(jìn)程都有自己獨(dú)立的內(nèi)存空間
    4、進(jìn)程間通訊主要是通過(guò)信號(hào)傳遞的方式來(lái)實(shí)現(xiàn)的,實(shí)現(xiàn)方式有多種,信號(hào)量、管道、事件等,任何一種方式的通訊效率都需要過(guò)內(nèi)核,導(dǎo)致通訊效率比較低
    5、由于是獨(dú)立的內(nèi)存空間,上下文切換的時(shí)候需要保存先調(diào)用棧的信息、cpu各寄存器的信息、虛擬內(nèi)存、以及打開(kāi)的相關(guān)句柄等信息,所以導(dǎo)致上下文進(jìn)程間切換開(kāi)銷很大,通訊麻煩。

    線程

    1、線程之間共享變量,解決了通訊麻煩的問(wèn)題對(duì)于變量的訪問(wèn)需要鎖
    2、一個(gè)進(jìn)程可以擁有多個(gè)線程,但是其中每個(gè)線程會(huì)共享父進(jìn)程像操作系統(tǒng)申請(qǐng)資源,這個(gè)包括虛擬內(nèi)存、文件等,由于是共享資源,所以創(chuàng)建線程所需要的系統(tǒng)資源占用比進(jìn)程小很多,相應(yīng)的可創(chuàng)建的線程數(shù)量也變得相對(duì)多很多。
    3、另外在調(diào)度方面也是由于內(nèi)存是共享的,所以上下文切換的時(shí)候需要保存的東西就像對(duì)少一些,這樣一來(lái)上下文的切換也變得高效。

    解釋
  • 通過(guò)php,運(yùn)行一個(gè)php文件,這個(gè)時(shí)候就相當(dāng)于我們創(chuàng)建了一個(gè)進(jìn)程,這個(gè)進(jìn)程會(huì)在系統(tǒng)中駐存,申請(qǐng)屬于它自己的內(nèi)存空間系統(tǒng)資源并且運(yùn)行相應(yīng)的程序。
    在這里插入圖片描述
  • swoole進(jìn)程

    在這里插入圖片描述
    1、Master進(jìn)程:主進(jìn)程
    2、Manger進(jìn)程:管理進(jìn)程
    3、Worker進(jìn)程:工作進(jìn)程
    4、Task進(jìn)程:異步任務(wù)工作進(jìn)程

  • 第一層,Master進(jìn)程,這個(gè)是swoole的主進(jìn)程,這個(gè)進(jìn)程是用于處理swoole的核心事件驅(qū)動(dòng)的,那么在這個(gè)進(jìn)程當(dāng)中可以看到它擁有一個(gè)MainReactor[線程]以及若干個(gè)Reactor[線程],swoole所有對(duì)于事件的監(jiān)聽(tīng)都會(huì)在這些線程中實(shí)現(xiàn),比如來(lái)自客戶端的連接,信號(hào)處理等。

  • 1.1、MainReactor(主線程)
    主線程會(huì)負(fù)責(zé)監(jiān)聽(tīng)server socket,如果有新的連接accept,主線程會(huì)評(píng)估每個(gè)Reactor線程的連接數(shù)量。將此連接分配給連接數(shù)最少的reactor線程,做一個(gè)負(fù)載均衡。

  • 1.2 、Reactor線程組
    Reactor線程負(fù)責(zé)維護(hù)客戶端機(jī)器的TCP連接、處理網(wǎng)絡(luò)IO、收發(fā)數(shù)據(jù)完全是異步非阻塞的模式。
    swoole的主線程在Accept新的連接后,會(huì)將這個(gè)連接分配給一個(gè)固定的Reactor線程,在socket可讀時(shí)讀取數(shù)據(jù),并進(jìn)行協(xié)議解析,將請(qǐng)求投遞到Worker進(jìn)程。在socket可寫(xiě)時(shí)將數(shù)據(jù)發(fā)送給TCP客戶端。

  • 1.3、心跳包檢測(cè)線程(HeartbeatCheck)
    Swoole配置了心跳檢測(cè)之后,心跳包線程會(huì)在固定時(shí)間內(nèi)對(duì)所有之前在線的連接
    發(fā)送檢測(cè)數(shù)據(jù)包

  • 1.4、UDP收包線程(UdpRecv)
    接收并且處理客戶端udp數(shù)據(jù)包

  • swoole想要實(shí)現(xiàn)最好的性能必須創(chuàng)建出多個(gè)工作進(jìn)程幫助處理任務(wù),但Worker進(jìn)程就必須fork操作,但是fork操作是不安全的,如果沒(méi)有管理會(huì)出現(xiàn)很多的僵尸進(jìn)程,進(jìn)而影響服務(wù)器性能,同時(shí)worker進(jìn)程被誤殺或者由于程序的原因會(huì)異常退出,為了保證服務(wù)的穩(wěn)定性,需要重新創(chuàng)建worker進(jìn)程。

  • Swoole在運(yùn)行中會(huì)創(chuàng)建一個(gè)單獨(dú)的管理進(jìn)程,所有的worker進(jìn)程和task進(jìn)程都是從管理進(jìn)程Fork出來(lái)的。管理進(jìn)程會(huì)監(jiān)視所有子進(jìn)程的退出事件,當(dāng)worker進(jìn)程發(fā)生致命錯(cuò)誤或者運(yùn)行生命周期結(jié)束時(shí),管理進(jìn)程會(huì)回收此進(jìn)程,并創(chuàng)建新的進(jìn)程。換句話也就是說(shuō),對(duì)于worker、task進(jìn)程的創(chuàng)建、回收等操作全權(quán)有“保姆”Manager進(jìn)程進(jìn)行管理

  • worker 進(jìn)程屬于swoole的主邏輯進(jìn)程,用戶處理客戶端的一系列請(qǐng)求,接受由Reactor線程投遞的請(qǐng)求數(shù)據(jù)包,并執(zhí)行PHP回調(diào)函數(shù)處理數(shù)據(jù)生成響應(yīng)數(shù)據(jù)并發(fā)給Reactor線程,由Reactor線程發(fā)送給TCP客戶端可以是異步非阻塞模式,也可以是同步阻塞模式

  • taskWorker進(jìn)程這一進(jìn)城是swoole提供的異步工作進(jìn)程,這些進(jìn)程主要用于處理一些耗時(shí)較長(zhǎng)的同步任務(wù),在worker進(jìn)程當(dāng)中投遞過(guò)來(lái)。

  • client跟server的交互:

    1、client請(qǐng)求到達(dá) Main Reactor,Client實(shí)際上是與Master進(jìn)程中的某個(gè)Reactor線程發(fā)生了連接。

    2、Main Reactor根據(jù)Reactor的情況,將請(qǐng)求注冊(cè)給對(duì)應(yīng)的Reactor (每個(gè)Reactor都有epoll。用來(lái)監(jiān)聽(tīng)客戶端的變化)

    3、客戶端有變化時(shí)Reactor將數(shù)據(jù)交給worker來(lái)處理

    4、worker處理完畢,通過(guò)進(jìn)程間通信(比如管道、共享內(nèi)存、消息隊(duì)列)發(fā)給對(duì)應(yīng)的reactor。

    5、reactor將響應(yīng)結(jié)果發(fā)給相應(yīng)的連接請(qǐng)求處理完成

    Master進(jìn)程內(nèi)的回調(diào)函數(shù)
  • onStart Server啟動(dòng)在主進(jìn)程的主線程回調(diào)此函數(shù)
  • onShutdown 此事件在Server正常結(jié)束時(shí)發(fā)生
  • Manager進(jìn)程內(nèi)的回調(diào)函數(shù)
  • onManagerStart 當(dāng)管理進(jìn)程啟動(dòng)時(shí)調(diào)用它
  • onManagerStop 當(dāng)管理進(jìn)程結(jié)束時(shí)調(diào)用它
  • onWorkerError 當(dāng)worker/task_worker進(jìn)程發(fā)生異常后會(huì)在Manager進(jìn)程內(nèi)回調(diào)此函數(shù)
  • Worker進(jìn)程內(nèi)的回調(diào)函數(shù)
  • onWorkerStart 此事件在Worker進(jìn)程/Task進(jìn)程啟動(dòng)時(shí)發(fā)生
  • onWorkerStop 此事件在worker進(jìn)程終止時(shí)發(fā)生。
  • onConnect 有新的連接進(jìn)入時(shí),在worker進(jìn)程中回調(diào)
  • onClose TCP客戶端連接關(guān)閉后,在worker進(jìn)程中回調(diào)此函數(shù)
  • onReceive 接收到數(shù)據(jù)時(shí)回調(diào)此函數(shù),發(fā)生在worker進(jìn)程中
  • onPacket 接收到UDP數(shù)據(jù)包時(shí)回調(diào)此函數(shù),發(fā)生在worker進(jìn)程中
  • onFinish 當(dāng)worker進(jìn)程投遞的任務(wù)在task_worker中完成時(shí),task進(jìn)程會(huì)通過(guò)finish()方法將任務(wù)處理的結(jié)果發(fā)送給worker進(jìn)程。
  • onWorkerExit 僅在開(kāi)啟reload_async特性后有效。異步重啟特性
  • onPipeMessage 當(dāng)工作進(jìn)程收到由 sendMessage 發(fā)送的管道消息時(shí)會(huì)觸發(fā)事件
  • Task進(jìn)程內(nèi)的回調(diào)函數(shù)
  • onTask 在task_worker進(jìn)程內(nèi)被調(diào)用。worker進(jìn)程可以使用swoole_server_task函數(shù)向task_worker進(jìn)程投遞新的任務(wù)
  • onWorkerStart 此事件在Worker進(jìn)程/Task進(jìn)程啟動(dòng)時(shí)發(fā)生
  • onPipeMessage 當(dāng)工作進(jìn)程收到由 sendMessage 發(fā)送的管道消息時(shí)會(huì)觸發(fā)事件
  • 簡(jiǎn)單說(shuō)明:
  • 1、服務(wù)器關(guān)閉程序終止時(shí)最后一次事件是onShutdown。
  • 2、服務(wù)器啟動(dòng)成功后,onStart/onManagerStart/onWorkerStart會(huì)在不同的進(jìn)程內(nèi)并發(fā)執(zhí)行,并不是順序的。
  • 3、所有事件回調(diào)均在$server->start后發(fā)生,start之后寫(xiě)的代碼是無(wú)效代碼。
  • 4、onStart/onManagerStart/onWorkerStart 3個(gè)事件的執(zhí)行順序是不確定的
  • swoole運(yùn)行流程圖

    在這里插入圖片描述

    <?php//tcp協(xié)議$server=new Swoole\Server("0.0.0.0",9800); //創(chuàng)建server對(duì)象$server->set([
     'worker_num'=>3, //設(shè)置進(jìn)程
     //'heartbeat_idle_time'=>10,//連接最大的空閑時(shí)間
     //'heartbeat_check_interval'=>3 //服務(wù)器定時(shí)檢查
     'open_length_check'=>1,
     'package_length_type'=>'N',//設(shè)置包頭的長(zhǎng)度
     'package_length_offset'=>0, //包長(zhǎng)度從哪里開(kāi)始計(jì)算
     'package_body_offset'=>4, //包體從第幾個(gè)字節(jié)開(kāi)始計(jì)算
     'package_max_length'=>1024 * 1024 * 2,]);$server->on("Start",function (){
    
     var_dump(1);
     //設(shè)置主進(jìn)程的名稱
     swoole_set_process_name("server-process:master");});//服務(wù)關(guān)閉時(shí)候觸發(fā)(信號(hào))$server->on("shutdown",function (){});//當(dāng)管理進(jìn)程啟動(dòng)時(shí)調(diào)用它$server->on('ManagerStart',function (){
     var_dump(2);
     //swoole_set_process_name("server-process:manger");});$server->on('WorkerStart',function ($server,$workerId){
     // swoole_set_process_name("server-process:worker");
     var_dump(3);});//監(jiān)聽(tīng)事件,連接事件(woker進(jìn)程當(dāng)中)$server->on('connect',function ($server,$fd){
     echo "新的連接進(jìn)入:{$fd}".PHP_EOL;});//消息發(fā)送過(guò)來(lái)(woker進(jìn)程當(dāng)中)$server->on('receive',function (swoole_server $server, int $fd, int $reactor_id, string $data){
     //var_dump("消息發(fā)送過(guò)來(lái):".$data);
     //服務(wù)端});//消息關(guān)閉$server->on('close',function (){
     echo "消息關(guān)閉".PHP_EOL;});//服務(wù)器開(kāi)啟$server->start();echo '123456';

    聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    你對(duì)swoole的進(jìn)程,線程知道多少

    你對(duì)swoole的進(jìn)程,線程知道多少:swoole教程欄目介紹swoole的進(jìn)程,線程。推薦(免費(fèi)):swoole教程進(jìn)程1、進(jìn)程之間不共享任何狀態(tài) 2、進(jìn)程的調(diào)度由操作系統(tǒng)完成 3、每個(gè)進(jìn)程都有自己獨(dú)立的內(nèi)存空間 4、進(jìn)程間通訊主要是通過(guò)信號(hào)傳遞的方式來(lái)實(shí)現(xiàn)的,實(shí)現(xiàn)方式有多種,信號(hào)量、管道、事件等,
    推薦度:
    標(biāo)簽: 知道 了解 進(jìn)程
    • 熱門焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top