背景描述:

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