利用swoole多程序減少後端訪問時間的方法

2021-09-24 09:41:49 字數 2327 閱讀 8931

應用場景說明

應用一:請求介面,減少時間

假設我們需要curl多個位址,例如3個,每個需要1秒,如果我們同步執行至少需要3秒完成,這對使用者的體驗是非常不好的,我們可以引入swoole的process子程序開啟三個程序同時curl則需要1秒處理好。

**實現:

<?php 

echo 'start:' . date("ymd h:i:s");

$urls = [

'','',

'',];//模仿讀取(已登出)

/*foreach ($urls as $url) */

//使用swoole的process開啟多個子程序

for ($i = 0; $i 

$pid = $process->start();

$wokers[$pid] = $process;

}foreach ($wokers as $process) 

function curldata($url)

echo 'end:' . date("ymd h:i:s");

執行結果如下,確實執行縮短至1秒

應用二:傳送郵件和簡訊

比如,我們要對已知的使用者資料進行判斷,是否需要傳送郵件和簡訊,如果需要傳送則傳送。

不使用多程序時,我們首先判斷是否傳送郵件,如果需要則傳送;然後再判斷是否需要傳送簡訊,如果需要則傳送。如果傳送郵件耗時2s,傳送簡訊耗時2s,那麼我們完成任務大概需要4s左右的時間。

如果我們使用多執行緒的話,可以開兩個執行緒,乙個用於處理郵件,乙個用於處理簡訊,則耗時一共需要2s左右,處理時間縮短了一半。

下面看詳細**

<?php 

$info = array(

"sendmail"=>1,

"mailto"=>"[email protected]",

"sendsms"=>1,

"smsto"=>"123456"

);echo "start:".date("y-m-d h:i:s").php_eol;

$mail_process = new swoole_process('sendmail',true);

$mail_process->start();

$sms_process = new swoole_process('sendsms',true);

$sms_process->start();

//主程序輸出子程序範圍內容

echo $mail_process->read();

echo php_eol;

echo $sms_process->read();

echo php_eol;

echo "end:".date("y-m-d h:i:s").php_eol;

//並行函式

function sendmail(swoole_process $worker)

}function sendsms(swoole_process $worker)

}

應用三:網頁抓取,迴圈執行任務,劃分多個程序執行假設我們現在有乙個通過curl抓取網頁內容的需求,需要抓取10個網頁,url位址通過陣列讀取,每個curl耗時2s。如果我們通過for迴圈來抓取這10個網頁,需要耗時20s,使用多程序我們可以將任務劃分成5份,分別由5個程序執行,每個程序抓取2個url,併發執行,共耗時4s,效率提高5倍。

<?php 

$url_arr = array();

for ($i=0;$i<10;$i++)

echo "start:".date("y-m-d h:i:s").php_eol;

$workers = array();

for ($i=0;$i<5;$i++)

//主程序資料結果

foreach ($workers as $process)

echo "end:".date("y-m-d h:i:s").php_eol;

function getcontents(swoole_process $worker)

function execcurl($url)

執行效果如下:

swoole多程序任務

swoole發展很快版本迭代也很快,是彌補了php的缺點,提公升了php的效能,唯一的不足就是文件太差了點,很多想入門的人在官方文件並不能夠順利的進行學習。我也是開始研究swoole的一些知識,下面是總結的swoole多程序的一些知識點。swoole多程序例子1 單程序傳送10封郵件 start t...

Swoole多程序的實現

使用swoole多程序上傳檔案到網宿伺服器 created by phpstorm.user leeo date 2016 9 29 time 15 26 引入檔案上傳類include once filehandleclass.php obj fetch new filehandleclass wo...

Swoole 多程序 簡單示例

一 任務 向使用者先傳送郵箱驗證碼,然後向使用者傳送手機驗證碼。如果是單程序,需要等待郵箱驗證碼傳送完畢才能傳送手機驗證碼,存在一定的耗時。可使用多程序 乙個程序傳送郵箱驗證碼,另乙個程序傳送手機驗證碼。info array email 11111111 qq.com phone 135999999...