博主信息
Whitney的博客
博文
38
粉丝
3
评论
2
访问量
34967
积分:0
P豆:111

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

2019年07月26日 18:17:43阅读数:514博客 / Whitney的博客 / PHP

背景描述:

由于公司业务需要不停去三方物流请求更新的物流信息,单条请求太耗时,处理万条数据需要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);


全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
暂无评论暂无评论!
  • 第十期线上培训班