【发布时间】:2020-05-20 18:32:23
【问题描述】:
我想知道使用 curl_multi 时每个 curl 请求何时发出。
到目前为止我的代码:
$i = 0;
do {
$status = curl_multi_exec($mh, $running);
if($running){
curl_multi_select($mh);
}
$info = curl_multi_info_read($mh);
if ($info !== false) {
$i++;
if ($i % 10 === 0 && $i>0)
logTimeElapsed();
}
} while ($running && $status == CURLM_OK);
我主要从here 复制代码。
我的命中测试出奇地不一致。它似乎只在某些时候起作用。也许当我提出少量请求时。所以问题实际上可能与终点有关。如果是这种情况,我如何跟踪端点是否拒绝了我的请求?
【问题讨论】:
-
您没有从 $mh 中删除已完成的句柄,这可能与您的不一致问题有关。
if ($info !== false) {curl_multi_remove_handle($mh,$info['handle']); -
ick,你也可能会丢失消息,如果多个句柄在同一个 exec() 中完成,那么你只读取第一个句柄的消息,其余句柄的消息将丢失!糟糕的错误,
while(false!==($info=curl_multi_info_read($mh))){curl_multi_remove_handle($mh,$info['handle']); $i++; if ($i % 10 === 0 && $i>0) logTimeElapsed(); }
标签: php rest curl parallel-processing curl-multi