利用swoole多进程优化curl

前提:

假设我需要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秒
在这里插入图片描述

发布了57 篇原创文章 · 获赞 76 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/zhang5207892/article/details/82800569