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

資訊專欄INFORMATION COLUMN

利用swoole_process和eventloop實(shí)現(xiàn)php異步編程

Code4App / 3347人閱讀

摘要:思路很簡(jiǎn)單開一個(gè)子進(jìn)程處理異步事務(wù),處理完之后,通過(guò)管道告訴父進(jìn)程,并將返回?cái)?shù)據(jù)寫入管道代碼如下可以看到運(yùn)行結(jié)果是在前面證明是異步執(zhí)行的其實(shí)通過(guò)中的和也可以實(shí)現(xiàn)不需要借助但是提供的確實(shí)很好用

思路很簡(jiǎn)單:

開一個(gè)子進(jìn)程處理異步事務(wù),處理完之后,通過(guò)管道告訴父進(jìn)程,并將返回?cái)?shù)據(jù)寫入管道

代碼如下:

AsynHttpClient.php

url = $url;
        $this->callback = $callback;
        $this->run();
    }

    public function run()
    {
        $this->process = new swoole_process([$this, "callback"], true); 
        $this->process->start();
        swoole_event_add($this->process->pipe, function($pipe) {
            $content = $this->process->read();
            call_user_func($this->callback, $content);
            swoole_event_del($this->process->pipe);
        });
    }

    public function callback(swoole_process $process)
    {
        $ch = curl_init($this->url);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        $content = curl_exec($ch);

        curl_close($ch);
        
        $process->write($content);
    }
}

index.php

require "AsynHttpClient.php";

new AsynHttpClient("http://127.0.0.1:9000/api.php", function($data) {
   print_r($data);
});

echo 1;

api.php

 "ok",
  "data" => "hello",
]);
php -S 127.0.0.1:9000

可以看到運(yùn)行結(jié)果是1在前面, 證明是異步執(zhí)行的.

其實(shí)通過(guò)php中的pcntl_fork和libevent也可以實(shí)現(xiàn), 不需要借助swoole, 但是swoole提供的process確實(shí)很好用

https://www.iwantmoney.cn/art...

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

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

相關(guān)文章

  • 使用 swoole_process 實(shí)現(xiàn) PHP 進(jìn)程池

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

    Andrman 評(píng)論0 收藏0
  • PHP異步編程,異步的本質(zhì)

    摘要:實(shí)現(xiàn)異步的方式有哪些提供了一些異步方法那它們底層是用哪種方式實(shí)現(xiàn)的呢實(shí)現(xiàn)異步的方式有線程方式進(jìn)程方式復(fù)用線程方式和進(jìn)程方式類似有異步請(qǐng)求時(shí)開一個(gè)線程或者進(jìn)程獲取到數(shù)據(jù)后線程間可以直接共享數(shù)據(jù)進(jìn)程間可以通過(guò)進(jìn)程通信機(jī)制,如共享內(nèi)存管道等方式進(jìn) 實(shí)現(xiàn)異步的方式有哪些? swoole提供了一些異步方法, 那它們底層是用哪種方式實(shí)現(xiàn)的呢? 實(shí)現(xiàn)異步的方式有: 線程方式 進(jìn)程方式 IO復(fù)用 ...

    lushan 評(píng)論0 收藏0
  • PHP多進(jìn)程系列筆記(五)

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

    qianfeng 評(píng)論0 收藏0
  • Swoole 源碼分析——進(jìn)程管理 Swoole_Process

    摘要:清空主進(jìn)程殘留的定時(shí)器與信號(hào)。設(shè)定為執(zhí)行回調(diào)函數(shù)如果在回調(diào)函數(shù)中調(diào)用了異步系統(tǒng),啟動(dòng)函數(shù)進(jìn)行事件循環(huán)。因此為了區(qū)分兩者,規(guī)定并不允許兩者同時(shí)存在。 前言 swoole-1.7.2 增加了一個(gè)進(jìn)程管理模塊,用來(lái)替代 PHP 的 pcntl 擴(kuò)展。 PHP自帶的pcntl,存在很多不足,如 pcntl 沒有提供進(jìn)程間通信的功能 pcntl 不支持重定向標(biāo)準(zhǔn)輸入和輸出 pcntl 只...

    pepperwang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<