PHP使用curl_multi多次卷曲到相同的API

时间:2018-12-07 03:10:02

标签: php curl php-curl curl-multi

我有一个API,同时使用不同的信息至少调用了10次。

这是我当前正在使用的功能。

$mh = curl_multi_init();
$arr = array();
$rows = array();

while ($row = mysqli_fetch_array($query)) {
    array_push($arr, initiate_curl($row, $mh));
    array_push($rows, $row);
}
$running = null;
for(;;){
  curl_multi_exec($mh, $running);
  if(!$running){
     break;
  }
  curl_multi_select($mh);
  usleep(1);
}

sleep(1);

foreach($arr as $curl) {curl_multi_remove_handle($mh, $curl);}
curl_multi_close($mh);
foreach($arr as $key=>$curl) {
    $result = curl_multi_getcontent($curl);
    $dat = simplexml_load_string($result);
    check_time($dat, $rows[$key], $fp);
}

当请求数量很少时,它可以正常工作,但是当请求数量增加时,某些卷曲不会带回适当的数据。即它们返回null,我猜是因为服务器在任何事情发生之前就通过了。

我该怎么做才能使它起作用?我没有使用php或服务器的经验,并且很难阅读文档。

如果我创建另一个php文件,并在其中卷曲到API以处理数据,并对该php文件进行multi_curl操作,会更好吗? (因为在这种情况下,某些调用不返回数据就没有那么重要了。这会导致服务器不断过载吗?

1 个答案:

答案 0 :(得分:0)

这不是卷曲问题,这是服务器利用率问题,因此请尝试升级服务器。

有用的链接: link1 link2

  

注意:使用无限循环[for(;;)]时要小心,并定期监视CPU使用率。