PHP 中的非同步curl 請求
同時執行多個curl 請求在PHP 中可能是一個挑戰。在本文中,我們將探索使用內建函數和外部函式庫實現非同步執行的不同方法。
cURL 多線程
PHP 的curl_multi_* 函數允許用於非同步執行多個 cURL 請求。這是一個例子:
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);
pthreads
pthreads 函式庫允許在 PHP 中進行多執行緒程式設計。使用pthreads,可以像這樣實現非同步curl請求:
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();
使用庫並行執行
PHP中還有專門為並行執行而設計的庫,例如parallel-functions和parallel-要求。以下是使用平行請求庫的範例:
use Parallel\{Task, Runtime};
$runtime = new Runtime;
$tasks = [
new Task(function () {
// ... cURL request 1
}),
new Task(function () {
// ... cURL request 2
}),
];
$runtime->run($tasks);
注意事項
執行非同步請求時,考慮伺服器的資源限制和潛在瓶頸非常重要。處理執行過程中可能發生的錯誤和異常也至關重要。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3