PHP에서 Curl_multi_exec 및 Curl_multi_info_read는 여러 HTTP 요청을 동시에 시작해야하고 이러한 요청을 효율적으로 병렬로 실행하려면 매우 실용적인 기능입니다. 이 기사는이 두 기능을 사용하여 효율적인 병렬 요청을 달성하고 특정 코드 예제를 제공하는 방법을 자세히 소개합니다.
curl_multi_exec : 멀티플렉싱을 구현하기 위해 컬 핸들 세트를 실행하는 데 사용됩니다. 모든 조인 요청을 병렬로 실행합니다.
curl_multi_info_read : 완료된 요청에 대한 정보를 얻는 데 사용되어 요청이 종료되었는지 여부를 감지하여 해당 결과를 처리 할 수 있습니다.
여러 단일 컬 요청 (컬 핸들)을 초기화하십시오.
다중화 된 핸들을 만듭니다.
다중 개별 핸들에 모든 개별 요청을 추가하십시오.
모든 요청을 실행하려면 curl_multi_exec을 호출하십시오.
curl_multi_info_read를 통해 요청이 완료되었는지 여부를 지속적으로 감지하십시오.
완료 요청 결과를 처리하십시오.
리소스 정리.
<?php
// 요청합니다URL목록
$urls = [
'http://gitbox.net/api/endpoint1',
'http://gitbox.net/api/endpoint2',
'http://gitbox.net/api/endpoint3',
];
// 초기화 multi handle
$multiHandle = curl_multi_init();
$curlHandles = [];
// 1. 싱글을 만듭니다curl핸들,그리고 가입multi핸들
foreach ($urls as $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 직접 출력 대신 결과를 반환합니다
curl_multi_add_handle($multiHandle, $ch);
$curlHandles[] = $ch;
}
// 2. 모든 요청을 수행하십시오
$running = null;
do {
// 요청을 실행하십시오
curl_multi_exec($multiHandle, $running);
// 선택 과목:활성 연결을 기다리고 있습니다,예방하다CPU너무 높은 점유
curl_multi_select($multiHandle);
// 3. 완료된 요청이 있는지 확인하십시오
while ($info = curl_multi_info_read($multiHandle)) {
if ($info['msg'] === CURLMSG_DONE) {
$handle = $info['handle'];
// 콘텐츠를 얻으십시오
$content = curl_multi_getcontent($handle);
// 반품 컨텐츠 처리,예를 들어, 인쇄 또는 구문 분석
echo "완료를 요청하십시오,내용 길이:" . strlen($content) . "\n";
// 移除完成的핸들,리소스를 자유롭게합니다
curl_multi_remove_handle($multiHandle, $handle);
curl_close($handle);
}
}
} while ($running > 0);
// 4. 폐쇄multi핸들
curl_multi_close($multiHandle);
?>
curl_multi_init () : 다중 핸들을 초기화합니다.
curl_multi_add_handle () : 각 개인 요청 된 컬 핸들을 멀티 핸들에 추가합니다.
curl_multi_exec () : 모든 요청을 실행합니다.
curl_multi_select () : CPU의 공전을 피하기 위해 활성 연결을 기다립니다.
curl_multi_info_read () : 완료 요청의 관련 정보를 읽고 요청이 종료되었는지 여부를 결정합니다.
curl_multi_remove_handle () 및 curl_close () : 메모리 누출을 피하기 위해 리소스를 정리하십시오.
모든 요청이 완료 될 때까지 루프 ( $ 실행은 0이됩니다).
서버 압력이나 시스템 리소스 병목 현상을 피하기 위해 병렬 요청 수가 너무 크지 않아야합니다.
curl_multi_select ()를 사용하여 프로그램이 높은 CPU 사용에 빠지지 않도록 기다리십시오.
반환 된 컨텐츠를 처리 할 때 오류 확인에주의를 기울여 요청이 성공했는지 확인하십시오.
게시물, 헤더 및 인증과 같은 복잡한 요청을 시작 해야하는 경우 단일 컬 핸들을 초기화 할 때 해당 옵션을 설정할 수 있습니다.