應用場景說明
應用一:請求介面,減少時間
假設我們需要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...