PHP 中的非同步curl 請求
同時執行多個curl 請求在PHP 中可能是一個挑戰。在本文中,我們將探索使用內建函數和外部函式庫實現非同步執行的不同方法。
cURL 多執行緒
PHP 的curl_multi_* 函數允許用於非同步執行多個 cURL 請求。以下是範例:
<code class="php">curl_multi_init(); $mh = curl_multi_init(); $ch1 = curl_init(); curl_setopt($ch1, CURLOPT_URL, 'http://example.com/endpoint'); curl_multi_add_handle($mh, $ch1); $ch2 = curl_init(); curl_setopt($ch2, CURLOPT_URL, 'http://example.com/endpoint2'); curl_multi_add_handle($mh, $ch2); $active = null; 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, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh);</code>
pthreads
pthreads 函式庫允許在 PHP 中進行多執行緒程式設計。使用pthreads,可以這樣實現非同步curl請求:
<code class="php">class RequestThread extends Thread { public function run() { $ch = curl_init(); // ... set cURL options here curl_exec($ch); curl_close($ch); } } $thread = new RequestThread(); $thread->start();</code>
使用庫並行執行
PHP中也有專門為並行執行而設計的庫,例如作為並行功能和並行請求。以下是使用平行請求庫的範例:
<code class="php">use Parallel\{Task, Runtime}; $runtime = new Runtime; $tasks = [ new Task(function () { // ... cURL request 1 }), new Task(function () { // ... cURL request 2 }), ]; $runtime->run($tasks);</code>
注意事項
執行非同步請求時,考慮伺服器的資源限制和潛在瓶頸非常重要。處理執行過程中可能發生的錯誤和異常也至關重要。
以上是如何在PHP中實現異步cURL請求?的詳細內容。更多資訊請關注PHP中文網其他相關文章!