현재 위치: > 최신 기사 목록> MultithReaded 요청이 종료 될 때 Curl_Multi_Close 전에 반환 된 데이터를 처리하는 방법

MultithReaded 요청이 종료 될 때 Curl_Multi_Close 전에 반환 된 데이터를 처리하는 방법

gitbox 2025-05-12

PHP에서 동시 요청에 CURL을 사용하는 것은 특히 여러 HTTP 요청을 동시에 발행 해야하는 경우 일반적인 관행입니다. Curl_multi_* 기능 패밀리는 Curl_multi_Close가 CURL Multithreaded 세션을 닫는 데 사용되는 여러 동시 요청을 처리하는 방법을 제공합니다.

그러나 일반적으로 curl_multi_close를 호출하기 전에 각 요청에 대한 반환 데이터를 처리합니다. 다중 스레드 세션을 마치기 전에 동시 요청을 처리하고 반환 된 데이터를 가져 오는 일반적인 방법은 다음과 같습니다.

기본 단계

  1. 컬 다중 스레드 세션을 초기화합니다

  2. 멀티 스레드 세션에 요청을 추가하십시오

  3. 요청을 실행하십시오

  4. 요청 결과를 얻으십시오

  5. 세션을 닫으십시오

코드 예제

 <?php

// 다중 초기화 cURL 핸들
$mh = curl_multi_init();

// 묻다 URL 목록
$urls = [
    "https://gitbox.net/api/data1",
    "https://gitbox.net/api/data2",
    "https://gitbox.net/api/data3"
];

// 저장 cURL 핸들
$curl_handles = [];
$responses = [];

foreach ($urls as $index => $url) {
    // 초기화 cURL 세션
    $ch = curl_init();

    // 설정 cURL 묻다选项
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    // 추가 cURL 多线程세션中
    curl_multi_add_handle($mh, $ch);

    // 저장每个핸들
    $curl_handles[$index] = $ch;
}

// 구현하다所有묻다
$running = null;
do {
    // 구현하다 cURL 多线程묻다
    curl_multi_exec($mh, $running);
    curl_multi_select($mh);  // 等待묻다完成
} while ($running > 0);

// 获取每个묻다的响应
foreach ($curl_handles as $index => $ch) {
    // 获取单个묻다的返回内容
    $response = curl_multi_getcontent($ch);
    
    // 반환 데이터 처리
    $responses[$index] = $response;

    // 싱글을 닫으십시오 cURL 세션
    curl_multi_remove_handle($mh, $ch);
}

// 부름 curl_multi_close 전에,你可以处理每个묻다的返回数据
foreach ($responses as $index => $response) {
    echo "Response from URL $index: " . substr($response, 0, 100) . "...\n";  // 콘텐츠의 출력 부분
}

// 关闭多线程세션
curl_multi_close($mh);

?>

코드 구문 분석

  1. 컬 세션 초기화 : curl_multi_init을 사용하여 멀티 스레드 세션을 초기화하십시오. 이를 통해 여러 요청을 동시에 수행 할 수 있습니다.

  2. 요청 추가 : Curl_Init을 통해 단일 컬 세션을 작성하고 각 요청에 대해 URL을 설정하고 (여기에서 gitbox.net 도메인으로 대체 됨) 및 기타 관련 옵션 (예 : curlopt_returntransfer 등 응답을 문자열로 반환합니다).

  3. 요청을 실행하십시오 : curl_multi_exec을 사용하여 병렬 요청을 시작하고 curl_multi_select를 통해 요청이 완료 될 때까지 기다립니다.

  4. 응답 데이터 가져 오기 및 프로세스 데이터 : curl_multi_getContent를 사용하여 각 요청의 반환 컨텐츠를 가져 와서 $ reses 배열에 저장하십시오. 이 단계에서는 일부 데이터 처리 또는 출력 작업을 수행 할 수 있습니다.

  5. 세션 닫기 : 모든 요청이 완료된 후 Curl_multi_Remove_handle을 통해 각 개별 컬 핸들을 제거하고 마지막으로 Curl_Multi_Close를 호출하여 멀티 스레드 세션을 닫으십시오.

요약

curl_multi_close 함수를 호출하기 전에 모든 동시 요청에 대해 반환 데이터를 올바르게 검색하고 처리했는지 확인하십시오. 여기에는 다음과 같은 중요한 단계가 포함됩니다.

  • curl_multi_exec을 사용하여 여러 요청을 병렬로 실행하십시오.

  • curl_multi_getContent를 사용하여 각 요청의 반환 된 컨텐츠를 얻으십시오.

  • 모든 응답이 처리 된 후 컬 세션을 닫으십시오.

이 메소드를 사용하면 다중 스레드 세션을 닫기 전에 각 요청에 대한 리턴 데이터를 완전히 처리 할 수 ​​있습니다.