摘要:話不多說直接上代碼創(chuàng)建的子進程獲取異步獲取更高性能啟動子進程子進程處理邏輯異步非阻塞網(wǎng)關(guān)連接失敗讀取父進程管道消息父進程獲取子進程的管道消息子進程消息子進程的客戶端可以忽略不計,本只是
話不多說直接上代碼
創(chuàng)建的子進程:
public function __construct() { $this->redis = Container::get(SwooleRedis::class);//獲取異步redis獲取更高性能 $this->process = new swoole_process(function (swoole_process $process) { return $this->process($process); }, false, SOCK_DGRAM); $this->process->name("Test_Gateway"); $this->process->useQueue(); $this->process->start();//啟動子進程 } /** * 子進程處理邏輯 * @param swoole_process $process */ private function process(swoole_process $process) { $client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC); //異步非阻塞 $client->on("connect", function (swoole_client $cli) use ($process) { $process->write("connected"); }); $client->on("receive", function (swoole_client $cli, $data) use ($process) { $process->write($data); }); $client->on("error", function (swoole_client $cli) use ($process) { $process->write("error"); }); $client->on("close", function (swoole_client $cli) use ($process) { $process->write("close"); }); if ($client->connect("127.0.0.1", 90, -1)) { } else { $process->write("網(wǎng)關(guān)連接失敗"); } swoole_event_add($process->pipe, function ($pipe) use ($process, $client) {//讀取父進程管道消息 $client->send($process->read()); }); }
父進程onWorkerStart:
/** * @param swoole_server $serv * @param $worker_id */ public function onWorkerStart(swoole_server $serv, $worker_id) { if ($worker_id === 0) { swoole_timer_tick(1000, function () { $this->process->write("ping"); }); $process = $this->process; swoole_event_add($process->pipe, function ($pipe) use ($process) {//獲取子進程的管道消息 echo "子進程消息:" . $process->read() . PHP_EOL; }); } }
子進程的client客戶端可以忽略不計,本demo只是掩飾管道通信的例子
使用管道就不可以使用消息隊列:$process_push()和$process->pop();
理論上在父子進程各注冊一個event_loop即可實現(xiàn)一邊發(fā)消息一邊接收
其他的后續(xù)補充
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/30929.html
摘要:消息隊列更常見的用途是主進程分配任務,子進程消費執(zhí)行。子進程前面加了個,這是為了防止父進程還未往消息隊列中加入內(nèi)容直接退出。 前面幾節(jié)都是講解pcntl擴展實現(xiàn)的多進程程序。本節(jié)給大家介紹swoole擴展的swoole_process模塊。 swoole多進程 swoole_process 是swoole提供的進程管理模塊,用來替代PHP的pcntl擴展。 首先,確保安裝的swoole...
摘要:本文使用與完成一個的進程池,并且支持動態(tài)創(chuàng)建新進程。接著遍歷所有的進程,并且加入中,設置可讀事件,用于接收子進程的空閑信號。最后每隔一秒向進程投遞任務。由于只模擬了十次任務,則第十個任務完成之后在父進程中發(fā)送使所有子進程退出。 swoole_process 主要是用來代替 PHP 的 pcntl 擴展。我們知道 pcntl 是用來進行多進程編程的,而 pcntl 只提供了 fork 這...
摘要:從入門到放棄三一進程子進程創(chuàng)建成功后要執(zhí)行的函數(shù)重定向子進程的標準輸入和輸出。默認為阻塞讀取。是否創(chuàng)建管道,啟用后,此選項將忽略用戶參數(shù),強制為。 swoole——從入門到放棄(三) 一、進程 swoole_process SwooleProcess swoole_process::__construct(callable $function, $redirect_stdin...
摘要:從入門到放棄三一進程子進程創(chuàng)建成功后要執(zhí)行的函數(shù)重定向子進程的標準輸入和輸出。默認為阻塞讀取。是否創(chuàng)建管道,啟用后,此選項將忽略用戶參數(shù),強制為。 swoole——從入門到放棄(三) 一、進程 swoole_process SwooleProcess swoole_process::__construct(callable $function, $redirect_stdin...
閱讀 950·2021-11-22 12:09
閱讀 3715·2021-09-27 13:36
閱讀 1407·2021-08-20 09:37
閱讀 4030·2019-12-27 12:22
閱讀 2367·2019-08-30 15:55
閱讀 2373·2019-08-30 13:16
閱讀 2832·2019-08-26 17:06
閱讀 3443·2019-08-23 18:32