>  기사  >  백엔드 개발  >  PHP에서 비동기 cURL 요청을 달성하는 방법은 무엇입니까?

PHP에서 비동기 cURL 요청을 달성하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-03 07:22:02496검색

How to Achieve Asynchronous cURL Requests in PHP?

PHP의 비동기 컬 요청

PHP에서는 여러 컬 요청을 동시에 실행하는 것이 어려울 수 있습니다. 이 기사에서는 내장 함수와 외부 라이브러리를 사용하여 비동기 실행을 달성하기 위한 다양한 접근 방식을 살펴보겠습니다.

cURL 멀티스레딩

PHP의 cur_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 &amp;&amp; $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에서 다중 스레드 프로그래밍을 허용합니다. pthread를 사용하면 다음과 같이 비동기식 컬 요청을 달성할 수 있습니다.

<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.