首頁  >  文章  >  後端開發  >  如何在 PHP 中非同步執行並發 cURL 請求?

如何在 PHP 中非同步執行並發 cURL 請求?

DDD
DDD原創
2024-11-02 05:43:02921瀏覽

How Can I Execute Concurrent cURL Requests Asynchronously in PHP?

在PHP 中非同步執行並發cURL 請求

簡介

順序執行curl 請求可能會導致效能問題,尤其是在處理多個資源時-密集的請求。本文探討了非同步執行技術,以優化 PHP 中的 curl 請求處理。

非同步 cURL

PHP 提供了使用 curl_multi_* 指令進行非同步 cURL 執行的內建函數。這是使用此方法的程式碼的修訂版本:

<code class="php">$mh = curl_multi_init();
curl_multi_add_handle($mh, $session); // session for the first request
curl_multi_add_handle($mh, $ch); // ch for the second request

do {
    $mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active & $mrc == CURLM_OK) {
    if (curl_multi_select($mh) != -1) {
        do {
            $mrc = curl_multi_exec($mh, $active);
        } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }
}
curl_multi_remove_handle($mh, $session);
curl_multi_remove_handle($mh, $ch);
curl_multi_close($mh);</code>

此方法使用curl_multi_exec() 同時執行兩個curl 句柄。

pThreads

另一個選項是pThreads ,一個 PHP 執行緒函式庫。以下是使用此程式庫的範例:

<code class="php">class Request1 extends Thread {
    // ... your implementation
}

class Request2 extends Thread {
    // ... your implementation
}

$req1 = new Request1();
$req1->start();
$req2 = new Request2();
$req2->start();</code>

此程式碼建立兩個執行緒物件並使用 start() 方法啟動它們。每個執行緒執行自己的 cURL 請求。

資源

  • [PHP 手冊- cURL 多部分介面](https://www.php.net/manual/en/function.curl -multi-init.php)
  • [PHP 手冊- 執行緒類別](https://www.php.net/manual/en/class.thread.php)

以上是如何在 PHP 中非同步執行並發 cURL 請求?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn