Maison  >  Questions et réponses  >  le corps du texte

Appeler plusieurs API simultanément en PHP

J'essaie de demander plusieurs API le plus rapidement possible. Alors j'ai essayé curl_multi. Mais j'obtiens des résultats plus lents que foreach et file_get_contents. Qu'ai-je fait de mal?

Utilisation file_get_contents :

<?php
$start = microtime(true);
$urls = array("https://www.example1.com/", "https://www.example2.com/", "https://www.example3.com/");

foreach ($urls as $url) {
    $result = file_get_contents($url);
}

echo microtime(true) - $start;
?>

Utilisation curl_multi :

<?php
$start = microtime(true);
$urls = array("https://www.example1.com/", "https://www.example2.com/", "https://www.example3.com/");
$urls_count = count($urls);
$curl_arr = array();
$master = curl_multi_init();

for($i = 0; $i < $urls_count; $i++)
{
    $curl_arr[$i] = curl_init($urls[$i]);
    curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, true);
    curl_multi_add_handle($master, $curl_arr[$i]);
}

do {
    curl_multi_exec($master,$running);
} while($running > 0);

for($i = 1; $i < $urls_count; $i++)
{
    $results = curl_multi_getcontent  ( $curl_arr[$i]  );
}

echo microtime(true) - $start;
?>

P粉917406009P粉917406009432 Il y a quelques jours1024

répondre à tous(1)je répondrai

  • P粉222320176

    P粉2223201762023-09-07 14:16:04

    Ce problème est curl_multi有很大的开销。我假设它必须为每个请求创建一个 shell 进程,然后在该进程中执行curl,最后将内容返回到请求该操作的脚本。 file_get_contents inhérent au langage PHP optimisé :

    C'est une excellente expérience d'apprentissage pour savoir quand utiliser les bibliothèques et les fonctionnalités natives du langage. De plus, les bibliothèques peuvent éventuellement être multithread et tirer parti des processeurs multicœurs, ce qui peut accélérer les requêtes. Quelque chose à rechercher et à tester.

    répondre
    0
  • Annulerrépondre