PHP에서 Curl_multi_* 함수는 여러 HTTP 요청을 동시에 보내는 효율적인 방법을 제공합니다. 특히 CURL_MULTI_INFO_READ 함수는 여러 CURL 요청을 시작할 때 리턴 데이터를 관리하고 처리하는 데 도움이됩니다. 이 기사는 CURL_MULTI_INFO_READ를 사용하여 효율성과 정확성을 보장 할 때 여러 CURL 요청의 반환 데이터를 완전히 관리하고 처리하는 방법을 자세히 살펴 봅니다.
PHP에서 CURL EXTENSION은 HTTP 요청에 대한 풍부한 API를 제공합니다. 여러 HTTP 요청을 시작 해야하는 경우 CURL_MULTI_* 함수는 일반적으로 이러한 요청을 병렬로 실행하는 데 사용됩니다. Curl_multi_exec 은 여러 요청을 실행하는 데 사용되며 Curl_multi_info_read는 각 요청 및 해당 리턴 데이터의 실행 정보를 얻는 데 사용됩니다.
먼저 Curl_multi_init () 로 멀티 컬러 핸들을 초기화 한 다음 각 요청에 대해 별도의 컬 핸들을 만들고 멀티 컬러 핸들에 추가하십시오. 간단한 예는 다음과 같습니다.
<?php
// 하나 이상의 초기화 cURL 핸들
$multiCurl = curl_multi_init();
// 여러 개의 별도를 만듭니다 cURL 묻다핸들
$curlHandles = [];
$urls = ['https://gitbox.net/api/data1', 'https://gitbox.net/api/data2', 'https://gitbox.net/api/data3'];
foreach ($urls as $url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($multiCurl, $ch);
$curlHandles[] = $ch;
}
// 요청을 실행하십시오
do {
$status = curl_multi_exec($multiCurl, $active);
if ($active) {
// 이벤트가 완료 될 때까지 기다리십시오
curl_multi_select($multiCurl);
}
} while ($active && $status == CURLM_OK);
// 각 요청의 결과를 처리하십시오
foreach ($curlHandles as $ch) {
$response = curl_multi_getcontent($ch);
// 반환 데이터 처리
echo $response . PHP_EOL;
// 关闭핸들
curl_multi_remove_handle($multiCurl, $ch);
curl_close($ch);
}
// 많은 사람들을 닫습니다 cURL 핸들
curl_multi_close($multiCurl);
?>
위의 코드에서는 Curl_multi_add_handle 을 통해 Multi Curl Honder $ MultiCurl 에 각 컬 요청 핸들을 추가 한 다음 Curl_Multi_Exec을 통해 이러한 요청을 동시에 실행합니다.
curl_multi_info_read 함수는 멀티 컬 핸들에서 각 요청에 대한 리턴 정보를 얻는 데 사용됩니다. 이 기능을 통해 요청의 실행 상태, 오류 정보 및 요청의 반환 내용을 얻을 수 있습니다. 다음은 여러 요청에 대한 반환 된 데이터를 관리하고 처리하는 데 사용하는 방법입니다.
<?php
// 많은 사람들이 초기화되고 실행되었다고 가정합니다 cURL 묻다(위를 참조하십시오)
// 获取每个묻다的执行信息
while ($done = curl_multi_info_read($multiCurl)) {
// 获取묻다状态
$status = $done['result'];
$ch = $done['handle'];
if ($status === CURLE_OK) {
// 묻다成功
$response = curl_multi_getcontent($ch);
echo "묻다成功,반환 데이터: " . $response . PHP_EOL;
} else {
// 묻다失败
echo "묻다失败,오류 메시지:" . curl_error($ch) . PHP_EOL;
}
// 移除已完成的핸들
curl_multi_remove_handle($multiCurl, $ch);
curl_close($ch);
}
// 많은 사람들을 닫습니다 cURL 핸들
curl_multi_close($multiCurl);
?>
이 예에서는 curl_multi_info_read를 사용하여 각 요청에 대한 반환 정보를 얻습니다. 요청이 성공하면 curl_multi_getContent를 통해 반환 된 데이터를 얻게됩니다. 그렇지 않으면 오류 메시지를 인쇄합니다.
여러 요청이 병렬로 실행되면 각 요청의 반환 데이터는 다른 구조 또는 내용을 가질 수 있습니다. 따라서 반환 된 데이터를 처리 할 때는 다음과 같은 측면을 고려해야합니다.
데이터 형식의 통일성 : 모든 요청에 의해 반환 된 데이터가 일관성이 있는지 확인하여 후속 처리가 더 쉬워집니다. 예를 들어, 반환 된 데이터를 JSON 형식으로 변환하고 균일하게 구문 분석하는 것을 고려할 수 있습니다.
오류 처리 : 각 요청에 대해 요청 실패를 처리해야합니다. curl_multi_info_read는 문제를 디버깅하고 분석하는 데 도움이되는 요청 된 오류 정보를 얻을 수 있습니다.
비동기 데이터 처리 : 경우에 따라 반환 된 데이터는 데이터베이스에 입금하거나 다른 API 호출을하는 것과 같이 비동기 적으로 처리해야합니다. 이 경우 큐 시스템을 사용하거나 데이터를 캐시에 저장하고 나중에 처리 할 수 있습니다.
다음은 데이터 형식 처리 및 오류 처리를 결합한 예입니다.
<?php
// 여러 실행이 수행되었다고 가정하십시오 cURL 묻다并获取了반환 데이터
while ($done = curl_multi_info_read($multiCurl)) {
$ch = $done['handle'];
$status = $done['result'];
// 检查묻다是否成功
if ($status === CURLE_OK) {
$response = curl_multi_getcontent($ch);
// 반환했다고 가정합니다 JSON 데이터
$data = json_decode($response, true);
if ($data === null) {
echo "분석 JSON 데이터失败:" . json_last_error_msg() . PHP_EOL;
} else {
// 处理데이터
echo "成功获取데이터:" . print_r($data, true) . PHP_EOL;
}
} else {
// 묻다失败,输出오류 메시지
echo "묻다失败,오류 메시지:" . curl_error($ch) . PHP_EOL;
}
// 移除并关闭핸들
curl_multi_remove_handle($multiCurl, $ch);
curl_close($ch);
}
curl_multi_close($multiCurl);
?>
이 코드에서는 JSON_DECODE를 통해 반환 된 JSON 데이터를 구문 분석하고 구문 분석 오류를 처리합니다.
curl_multi_* 함수는 이미 병렬 요청을 허용하지만 동시성 높은 환경에서는 다음과 같은 최적화 측정을 고려해야합니다.
배치 요청 : 모든 요청을 한 번에 전송하는 대신 배치로 요청을 보냅니다. 자원 소진 또는 성능 저하로 이어지는 과도한 동시 요청을 피하십시오.
요청 시간 초과 설정 : 요청이 다른 요청의 실행을 차단하고 영향을 미치는 것을 방지하기 위해 적절한 시간 초과 제한을 설정합니다. curlopt_timeout 또는 curlopt_timeout_ms를 사용하여 요청 시간 초과를 설정하십시오.
연결 풀링 : 컬의 연결 멀티플렉싱 메커니즘을 사용하면 연결을 반복적으로 설정하는 오버 헤드가 줄어 듭니다. curlopt_forbid_reuse 및 curlopt_fresh_connect를 설정하여 연결 멀티플렉싱을 최적화 할 수 있습니다.
curl_multi_info_read 및 curl_multi_* 함수를 사용하면 PHP는 여러 병렬 HTTP 요청을 매우 효율적으로 관리하고 처리 할 수 있습니다. 실제 응용 프로그램에서는 요청의 병렬 실행에 중점을 둘뿐만 아니라 처리 된 데이터를 효과적으로 처리하여 처리의 신뢰성과 성능을 보장해야합니다.
이 기사가 PHP에서 Curl_multi_info_read를 사용하여 여러 요청을 관리하고 반환 데이터를 처리하는 방법을 더 잘 이해하는 데 도움이되기를 바랍니다.
관련 태그:
cURL