国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

swoole_process父子進(jìn)程管道通信案例

Cheng_Gang / 2880人閱讀

摘要:話不多說直接上代碼創(chuàng)建的子進(jìn)程獲取異步獲取更高性能啟動子進(jìn)程子進(jìn)程處理邏輯異步非阻塞網(wǎng)關(guān)連接失敗讀取父進(jìn)程管道消息父進(jìn)程獲取子進(jìn)程的管道消息子進(jìn)程消息子進(jìn)程的客戶端可以忽略不計,本只是

話不多說直接上代碼

創(chuàng)建的子進(jìn)程:

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();//啟動子進(jìn)程
    }
    
    /**
     * 子進(jìn)程處理邏輯
     * @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) {//讀取父進(jìn)程管道消息
                $client->send($process->read());
            });
    }

父進(jìn)程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) {//獲取子進(jìn)程的管道消息
                    echo "子進(jìn)程消息:" . $process->read() . PHP_EOL;
                });
        }
    }

子進(jìn)程的client客戶端可以忽略不計,本demo只是掩飾管道通信的例子

使用管道就不可以使用消息隊列:$process_push()和$process->pop();

理論上在父子進(jìn)程各注冊一個event_loop即可實現(xiàn)一邊發(fā)消息一邊接收

其他的后續(xù)補(bǔ)充

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/30929.html

相關(guān)文章

  • PHP多進(jìn)程系列筆記(五)

    摘要:消息隊列更常見的用途是主進(jìn)程分配任務(wù),子進(jìn)程消費執(zhí)行。子進(jìn)程前面加了個,這是為了防止父進(jìn)程還未往消息隊列中加入內(nèi)容直接退出。 前面幾節(jié)都是講解pcntl擴(kuò)展實現(xiàn)的多進(jìn)程程序。本節(jié)給大家介紹swoole擴(kuò)展的swoole_process模塊。 swoole多進(jìn)程 swoole_process 是swoole提供的進(jìn)程管理模塊,用來替代PHP的pcntl擴(kuò)展。 首先,確保安裝的swoole...

    qianfeng 評論0 收藏0
  • 使用 swoole_process 實現(xiàn) PHP 進(jìn)程

    摘要:本文使用與完成一個的進(jìn)程池,并且支持動態(tài)創(chuàng)建新進(jìn)程。接著遍歷所有的進(jìn)程,并且加入中,設(shè)置可讀事件,用于接收子進(jìn)程的空閑信號。最后每隔一秒向進(jìn)程投遞任務(wù)。由于只模擬了十次任務(wù),則第十個任務(wù)完成之后在父進(jìn)程中發(fā)送使所有子進(jìn)程退出。 swoole_process 主要是用來代替 PHP 的 pcntl 擴(kuò)展。我們知道 pcntl 是用來進(jìn)行多進(jìn)程編程的,而 pcntl 只提供了 fork 這...

    Andrman 評論0 收藏0
  • swoole——從入門到放棄(三)

    摘要:從入門到放棄三一進(jìn)程子進(jìn)程創(chuàng)建成功后要執(zhí)行的函數(shù)重定向子進(jìn)程的標(biāo)準(zhǔn)輸入和輸出。默認(rèn)為阻塞讀取。是否創(chuàng)建管道,啟用后,此選項將忽略用戶參數(shù),強(qiáng)制為。 swoole——從入門到放棄(三) 一、進(jìn)程 swoole_process SwooleProcess swoole_process::__construct(callable $function, $redirect_stdin...

    王笑朝 評論0 收藏0
  • swoole——從入門到放棄(三)

    摘要:從入門到放棄三一進(jìn)程子進(jìn)程創(chuàng)建成功后要執(zhí)行的函數(shù)重定向子進(jìn)程的標(biāo)準(zhǔn)輸入和輸出。默認(rèn)為阻塞讀取。是否創(chuàng)建管道,啟用后,此選項將忽略用戶參數(shù),強(qiáng)制為。 swoole——從入門到放棄(三) 一、進(jìn)程 swoole_process SwooleProcess swoole_process::__construct(callable $function, $redirect_stdin...

    rottengeek 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<