加速php api调用

加速php api调用,php,mysql,api,curl-multi,Php,Mysql,Api,Curl Multi,大家好。所以我需要通过API调用检查数据库中的大量行。我设法做到了,但速度很慢 以下是我的代码正在执行的步骤: 1.)我从本地数据库中选择唯一标识符 2.)我通过curl_multi(当时为100)在远程数据库上检查它们 3.)根据状态代码,我更新数据库中的行 4.)重复前3步,直到检查所有行 我怎样才能加快这个过程?此时,检查600行需要一分钟以上的时间 foreach ($data as $d){ $kupci = []; $upit = "SELECT * FROM

大家好。所以我需要通过API调用检查数据库中的大量行。我设法做到了,但速度很慢

以下是我的代码正在执行的步骤:

1.)我从本地数据库中选择唯一标识符

2.)我通过curl_multi(当时为100)在远程数据库上检查它们

3.)根据状态代码,我更新数据库中的行

4.)重复前3步,直到检查所有行

我怎样才能加快这个过程?此时,检查600行需要一分钟以上的时间

    foreach ($data as $d){
    $kupci = [];
    $upit = "SELECT * FROM database_table WHERE provjeren IS NULL LIMIT 100";
    $result = $conn->query($upit)
    while ($r = mysqli_fetch_assoc($result)) {
        $kupci[] = $r;
    }
    $node_count = count($kupci);
    $curl_arr = array();
    for ($i = 0; $i < $node_count; $i++) {
        $ID = str_replace(" ","%20",$kupci[$i]['Customer_ID']) ;
        $url = "someapiurl/$ID";
        $curl_arr[$i] = curl_init($url);
        curl_setopt($curl_arr[$i], CURLOPT_HTTPHEADER, array("Authorization: Bearer"));
        curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl_arr[$i], CURLOPT_ENCODING,  '');
    }
    $master = curl_multi_init();
    for ($i = 0; $i < $node_count; $i++) {
        curl_multi_add_handle($master, $curl_arr[$i]);
    }
    do {
        curl_multi_exec($master, $running);
    } while ($running > 0);
    for ($i = 0; $i < $node_count; $i++) {
        $results = curl_multi_getcontent($curl_arr[$i]);
        $link = curl_getinfo($curl_arr[$i], CURLINFO_EFFECTIVE_URL);
        $id = substr($link, strrpos($link, '/') + 1);
        $statusCode = curl_getinfo($curl_arr[$i], CURLINFO_RESPONSE_CODE);
        if ($statusCode == 204) {
            $conn->query("UPDATE database_table SET provjeren = 1, prigovor = 1, datum = now() WHERE Customer_ID = '$id'");
        } elseif ($statusCode == 404) {
            $conn->query("UPDATE database_table SET provjeren = 1, prigovor = 0, datum = now() WHERE Customer_ID = '$id'");
        }elseif ($statusCode == 429){
            echo "Previše";
        }elseif ($statusCode == 200){
            $conn->query("UPDATE database_table SET provjeren = 1, prigovor = 2, datum = now() WHERE Customer_ID = '$id'");
        }
        curl_multi_remove_handle($master, $curl_arr[$i]);
        curl_close($curl_arr[$i]);
    }
    curl_multi_close($master);
}
foreach($d数据){
$kupci=[];
$upit=“从provjeren为NULL LIMIT 100的数据库_表中选择*”;
$result=$conn->query($upit)
而($r=mysqli\u fetch\u assoc($result)){
$kupci[]=$r;
}
$node_count=count($kupci);
$curl_arr=array();
对于($i=0;$i<$node_count;$i++){
$ID=str_replace(“,“%20”,$kupci[$i]['Customer_ID']);
$url=“someapirl/$ID”;
$curl\u arr[$i]=curl\u init($url);
curl_setopt($curl_arr[$i],curl_HTTPHEADER,数组(“授权:承载”);
curl_setopt($curl_arr[$i],CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl_arr[$i],CURLOPT_编码,”);
}
$master=curl_multi_init();
对于($i=0;$i<$node_count;$i++){
curl_multi_add_句柄($master,$curl_arr[$i]);
}
做{
curl_multi_exec($master,$running);
}而($running>0);
对于($i=0;$i<$node_count;$i++){
$results=curl\u multi\u getcontent($curl\u arr[$i]);
$link=curl\u getinfo($curl\u arr[$i],CURLINFO\u EFFECTIVE\u URL);
$id=substr($link,strrpos($link,“/”)+1);
$statusCode=curl\u getinfo($curl\u arr[$i],CURLINFO\u RESPONSE\u CODE);
如果($statusCode==204){
$conn->query(“更新数据库\u表集provjeren=1,prigovor=1,datum=now(),其中Customer\u ID='$ID');
}elseif($statusCode==404){
$conn->query(“更新数据库\u表集provjeren=1,prigovor=0,datum=now(),其中Customer\u ID='$ID');
}elseif($statusCode==429){
呼应“Previše”;
}elseif($statusCode==200){
$conn->query(“更新数据库\u表集provjeren=1,prigovor=2,datum=now(),其中Customer\u ID='$ID');
}
curl_multi_remove_句柄($master,$curl_arr[$i]);
旋度闭合($curl_arr[$i]);
}
卷曲多合($master);
}

编辑:我尝试了滚动卷曲,得到了相同的结果。所以我的结论是目标服务器速度慢,这是我的瓶颈。在我的目标服务器上测试了500个请求,需要36秒才能完成,在Google服务器上只需要2秒就可以完成。

您是否尝试通过新线程运行HTTP API调用

尝试以下PHP项目:

根据您需要的文档:

  • 同时创建一个具有最大HTTP连接数的并行cURL对象
  • 当API的答案到达时,编写一个处理程序
  • 在迭代数据库中的行时编写cURL调用
如果没有帮助,请尝试测量花费最多时间的内容(DB抓取、API调用、DB更新)