Rufen Sie mehrere APIs gleichzeitig in PHP auf
P粉917406009
P粉917406009 2023-09-06 16:51:42
0
1
1049

Ich versuche, so schnell wie möglich mehrere APIs anzufordern. Also habe ich es versucht curl_multi. Aber ich erhalte langsamere Ergebnisse als foreach und file_get_contents. Was habe ich falsch gemacht?

Verwenden Sie 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;
?>

Verwenden Sie 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粉917406009
P粉917406009

Antworte allen(1)
P粉222320176

这个问题是curl_multi有很大的开销。我假设它必须为每个请求创建一个 shell 进程,然后在该进程中执行curl,最后将内容返回到请求该操作的脚本。 file_get_contents 已优化PHP 语言固有的:

对于何时使用库和语言中的本机功能,这是一个很好的学习体验。此外,库还可以选择多线程并利用多核处理器,这可能会加速请求。需要自己查找和测试的东西。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage