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