前提:
假设我需要CURL多个地址,例如3个,每个需要1秒,如果我们同步运行至少需要3秒完成,这对用户的体验是非常不好的,我们可以引入swoole的process子进程开启三个进程同时curl则需要1秒处理好。
案例代码
<?php
echo 'start:' . date("Ymd H:i:s");
$urls = [
'http://www.baidu.com',
'http://www.sina.com.cn',
'http://www.qq.com',
];
//模仿读取(已注销)
/*foreach ($urls as $url) {
$content = [] = file_get_contents($url);
}*/
//使用swoole的process开启多个子进程
for ($i = 0; $i < 3; $i++) {
//子进程 use用于传值
$process = new swoole_process(function (swoole_process $worker) use ($i, $urls) {
//curl处理
$content = curlData($urls[$i]);
//因为下面参数是true所以会输出到管道里
echo $content . PHP_EOL;
}, true);
$pid = $process->start();
$wokers[$pid] = $process;
}
foreach ($wokers as $process) {
echo $process->read();
}
function curlData($url)
{
//模拟消耗1秒
sleep(1);
return $url . "success" . PHP_EOL;
}
echo 'end:' . date("Ymd H:i:s");
运行结果如下,确实运行缩短至1秒