摘要:思路很簡(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
摘要:本文使用與完成一個(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 這...
摘要:實(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ù)用 ...
摘要:消息隊(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...
摘要:清空主進(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 只...
閱讀 857·2021-10-11 10:59
閱讀 2792·2019-08-30 15:43
閱讀 2129·2019-08-30 11:08
閱讀 1647·2019-08-29 15:20
閱讀 1002·2019-08-29 13:53
閱讀 486·2019-08-26 13:24
閱讀 1633·2019-08-26 13:24
閱讀 2820·2019-08-26 12:08