"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como obter solicitações cURL assíncronas em PHP?

Como obter solicitações cURL assíncronas em PHP?

Publicado em 2024-11-11
Navegar:933

How to Achieve Asynchronous cURL Requests in PHP?

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.

Tutorial mais recente Mais>

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