현재 위치: > 최신 기사 목록> curl_multi_info_read에서 여러 CURL 요청의 반환 데이터를 효과적으로 관리하고 처리하는 방법?

curl_multi_info_read에서 여러 CURL 요청의 반환 데이터를 효과적으로 관리하고 처리하는 방법?

gitbox 2025-06-19

PHP에서 Curl_multi_* 함수는 여러 HTTP 요청을 동시에 보내는 효율적인 방법을 제공합니다. 특히 CURL_MULTI_INFO_READ 함수는 여러 CURL 요청을 시작할 때 리턴 데이터를 관리하고 처리하는 데 도움이됩니다. 이 기사는 CURL_MULTI_INFO_READ를 사용하여 효율성과 정확성을 보장 할 때 여러 CURL 요청의 반환 데이터를 완전히 관리하고 처리하는 방법을 자세히 살펴 봅니다.

1. 배경 소개

PHP에서 CURL EXTENSION은 HTTP 요청에 대한 풍부한 API를 제공합니다. 여러 HTTP 요청을 시작 해야하는 경우 CURL_MULTI_* 함수는 일반적으로 이러한 요청을 병렬로 실행하는 데 사용됩니다. Curl_multi_exec 은 여러 요청을 실행하는 데 사용되며 Curl_multi_info_read는 각 요청 및 해당 리턴 데이터의 실행 정보를 얻는 데 사용됩니다.

2. curl_multi_* 함수를 사용하는 방법?

먼저 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을 통해 이러한 요청을 동시에 실행합니다.

3. curl_multi_info_read를 사용하여 요청 상태를 얻으십시오

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를 통해 반환 된 데이터를 얻게됩니다. 그렇지 않으면 오류 메시지를 인쇄합니다.

4. 요청 된 반품 데이터를 처리하는 방법은 무엇입니까?

여러 요청이 병렬로 실행되면 각 요청의 반환 데이터는 다른 구조 또는 내용을 가질 수 있습니다. 따라서 반환 된 데이터를 처리 할 때는 다음과 같은 측면을 고려해야합니다.

  1. 데이터 형식의 통일성 : 모든 요청에 ​​의해 반환 된 데이터가 일관성이 있는지 확인하여 후속 처리가 더 쉬워집니다. 예를 들어, 반환 된 데이터를 JSON 형식으로 변환하고 균일하게 구문 분석하는 것을 고려할 수 있습니다.

  2. 오류 처리 : 각 요청에 대해 요청 실패를 처리해야합니다. curl_multi_info_read는 문제를 디버깅하고 분석하는 데 도움이되는 요청 된 오류 정보를 얻을 수 있습니다.

  3. 비동기 데이터 처리 : 경우에 따라 반환 된 데이터는 데이터베이스에 입금하거나 다른 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 데이터를 구문 분석하고 구문 분석 오류를 처리합니다.

5. 성능 최적화 제안

curl_multi_* 함수는 이미 병렬 요청을 허용하지만 동시성 높은 환경에서는 다음과 같은 최적화 측정을 고려해야합니다.

  • 배치 요청 : 모든 요청을 한 번에 전송하는 대신 배치로 요청을 보냅니다. 자원 소진 또는 성능 저하로 이어지는 과도한 동시 요청을 피하십시오.

  • 요청 시간 초과 설정 : 요청이 다른 요청의 실행을 차단하고 영향을 미치는 것을 방지하기 위해 적절한 시간 초과 제한을 설정합니다. curlopt_timeout 또는 curlopt_timeout_ms를 사용하여 요청 시간 초과를 설정하십시오.

  • 연결 풀링 : 컬의 연결 멀티플렉싱 메커니즘을 사용하면 연결을 반복적으로 설정하는 오버 헤드가 줄어 듭니다. curlopt_forbid_reusecurlopt_fresh_connect를 설정하여 연결 멀티플렉싱을 최적화 할 수 있습니다.

6. 요약

curl_multi_info_readcurl_multi_* 함수를 사용하면 PHP는 여러 병렬 HTTP 요청을 매우 효율적으로 관리하고 처리 할 수 ​​있습니다. 실제 응용 프로그램에서는 요청의 병렬 실행에 중점을 둘뿐만 아니라 처리 된 데이터를 효과적으로 처리하여 처리의 신뢰성과 성능을 보장해야합니다.

이 기사가 PHP에서 Curl_multi_info_read를 사용하여 여러 요청을 관리하고 반환 데이터를 처리하는 방법을 더 잘 이해하는 데 도움이되기를 바랍니다.

  • 관련 태그:

    cURL