1. 程式人生 > >swoole使用異步進程通信

swoole使用異步進程通信

pre 非阻塞 執行文件 write 執行 文件 HP false count

$process = new swoole_process(function($pro){

  $pro->exec(‘//linux中的php命令所在絕對路徑‘, [‘//執行文件絕對路徑‘]);

}, false);

$process->start();//開啟進程

swoole_process::wait();//通過 #pstree -p Pid 進行查看線程間的關系

#####################################分隔符#################################################

用多進程執行多請求

//模擬請求多網站的數據
echo ‘start time : ‘ . date(‘H:i:s‘) . PHP_EOL;
$workers = [];
$urls = [
‘https://baidu.com‘,
‘https://sina.com.cn‘,
‘https://bilibili.com‘,
‘https://pipigui.cc‘,
‘https://www.swoole.com‘,
‘https://wiki.swoole.com‘,
];
$url_counts = count($urls);
for($i = 0; $i < $url_counts; $i++ ){
//創建線程請求
//當創建線程的第二個參數為true時,數據存儲在線程間的管道中,不打印出來,為非阻塞模式
//為false為阻塞,為同步執行
$process = new swoole_process(function($pro) use($i , $urls){
        $content = curlData($urls[$i]);
// echo $content . PHP_EOL;
$pro->write($content . PHP_EOL);
    },true);
$process->start();
$workers[] = $process;
}
//打印出存在管道的數據
foreach($workers as $process){
echo $process->read();
}
//模擬curl請求
function curlData($url){
sleep(1);
return $url . ‘: request success‘ ;
}
echo ‘end time : ‘ . date(‘H:i:s‘) . PHP_EOL;

swoole使用異步進程通信