博客列表 >使用curl_multi_init()函数解决单次请求curl耗时久的问题

使用curl_multi_init()函数解决单次请求curl耗时久的问题

Whitney的博客
Whitney的博客原创
2019年07月26日 18:17:432701浏览

背景描述:

由于公司业务需要不停去三方物流请求更新的物流信息,单条请求太耗时,处理万条数据需要4/5个小时左右,严重影响用户体验,故做了curl_multi_init的优化;

下面只选取中间最重要部分:

实例

$chuck_num = 50;
//由于$list数据量较大,使用array_chunk函数分割
$send_data = array_chunk($list, $chuck_num, true);

foreach ($send_data as $item) {
    $map = [];
    $mh = curl_multi_init();
    foreach ($item as $model) {
        //这里生成curl【注意:这里的curl是直接可以执行的curl资源】
        $ch = '';
        if ($ch) {
            $map[] = [$ch, $model];
            //将生成的单个curl加入到$mh中
            curl_multi_add_handle($mh, $ch);
        }
    }

    //执行此处汇总的curl
    do {
        curl_multi_exec($mh, $running);
    } while ($running > 0);

    foreach ($map as $one) {

        //获取不同的curl返回值
        $response = curl_multi_getcontent($ch);
        if ($response) {
            // TODO 对返回值做处理
        } else {
            // TODO 对请求失败的返回值做处理
        }

        //移除ch句柄
        curl_multi_remove_handle($mh, $ch);
    }
}

//关闭
curl_multi_close($mh);


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议