Solicitação curl assíncrona em PHP
Executar várias solicitações curl simultaneamente pode ser um desafio em PHP. Neste artigo, exploraremos diferentes abordagens para obter execução assíncrona usando funções integradas e bibliotecas externas.
cURL multithreading
As funções curl_multi_* do PHP permitem para execução assíncrona de múltiplas solicitações cURL. Aqui está um exemplo:
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
A biblioteca pthreads permite programação multithread em PHP. Usando pthreads, solicitações curl assíncronas podem ser obtidas assim:
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();
Execução paralela usando biblioteca
Existem também bibliotecas projetadas especificamente para execução paralela em PHP, como funções paralelas e funções paralelas solicitar. Aqui está um exemplo usando a biblioteca de solicitação paralela:
use Parallel\{Task, Runtime};
$runtime = new Runtime;
$tasks = [
new Task(function () {
// ... cURL request 1
}),
new Task(function () {
// ... cURL request 2
}),
];
$runtime->run($tasks);
Considerações
Ao executar solicitações assíncronas, é importante considerar os limites de recursos do servidor e possíveis gargalos. Também é crucial lidar com erros e exceções que podem ocorrer durante a execução.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3