首頁  >  問答  >  主體

PHP 中同時呼叫多個 API

我正在嘗試盡快請求多個 API。所以我嘗試了curl_multi。但我得到的結果比 foreach 和 file_get_contents 慢。我做錯了什麼?

使用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;
?>

使用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粉917406009430 天前1021

全部回覆(1)我來回復

  • P粉222320176

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

    這個問題是curl_multi有很大的開銷。我假設它必須為每個請求建立一個 shell 進程,然後在該進程中執行curl,最後將內容傳回請求該操作的腳本。 file_get_contents 已最佳化PHP 語言固有的:

    對於何時使用函式庫和語言中的本機功能,這是一個很好的學習經驗。此外,庫還可以選擇多執行緒並利用多核心處理器,這可能會加速請求。需要自己去找測試的東西。

    回覆
    0
  • 取消回覆