현재 위치: > 최신 기사 목록> 여러 컬 스레드 요청의 실행 상태를 실시간으로 얻는 데 도움이되는 방법은 무엇입니까?

여러 컬 스레드 요청의 실행 상태를 실시간으로 얻는 데 도움이되는 방법은 무엇입니까?

gitbox 2025-08-13

CURL을 사용하는 것은 여러 HTTP 요청과 관련된 PHP 프로그램을 개발할 때, 특히 많은 API 요청을 할 때 일반적인 선택입니다. 효율을 향상시키기 위해 PHP는 다중 스레드 컬 프로세싱 기능 CURL_MULTI_* 를 제공하여 여러 요청을 병렬로 보낼 수 있습니다. 이를 통해 프로그램은 응답을 기다리지 않고 여러 요청을 동시에 처리 할 수 있습니다.

그러나 멀티 스레드 컬을 사용하면 요청을 보내야 할뿐만 아니라 실행 상태, 오류 정보 및 각 요청의 반환 된 컨텐츠와 같은 데이터를 실시간으로 얻어야합니다. curl_multi_info_read () 함수는이 정보를 얻는 데 도움이되는 도구 중 하나입니다.

1. curl_multi_info_read () 란 무엇입니까?

curl_multi_info_read () 함수는 PHP의 함수입니다. 이를 통해 개발자는 여러 요청이 병렬 일 때 각 요청의 실행 진행 상황과 각 요청의 상태를 모니터링 할 수 있습니다. 이 함수는 HTTP 상태 코드를 포함하여 현재 요청 상태가 포함 된 배열을 반환합니다.

2. curl_multi_info_read ()를 사용하는 방법?

curl_multi_info_read ()를 사용하려면 curl_multi_init () 를 통해 멀티 스레드 컬 세션을 초기화 한 다음 Curl_multi_add_handle ()을 통해 세션에 여러 개의 별도 컬 핸들을 추가해야합니다. 마지막으로 curl_multi_exec ()를 사용하여 요청을 병렬로 실행하고 curl_multi_info_read ()를 사용하여 각 요청의 실행 상태를 얻을 수 있습니다.

간단한 예는 다음과 같습니다.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 멀티 스레딩 초기화 cURL 세션</span></span><span>
</span><span><span class="hljs-variable">$mh</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_multi_init</span></span><span>();

</span><span><span class="hljs-comment">// 다중 생성 cURL 핸들</span></span><span>
</span><span><span class="hljs-variable">$ch1</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_init</span></span><span>(</span><span><span class="hljs-string">"https://www.example.com"</span></span><span>);
</span><span><span class="hljs-variable">$ch2</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_init</span></span><span>(</span><span><span class="hljs-string">"https://www.example.org"</span></span><span>);

</span><span><span class="hljs-comment">// 설정 cURL 옵션</span></span><span>
</span><span><span class="hljs-title function_ invoke__">curl_setopt</span></span><span>(</span><span><span class="hljs-variable">$ch1</span></span><span>, CURLOPT_RETURNTRANSFER, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_setopt</span></span><span>(</span><span><span class="hljs-variable">$ch2</span></span><span>, CURLOPT_RETURNTRANSFER, </span><span><span class="hljs-literal">true</span></span><span>);

</span><span><span class="hljs-comment">// 할 것이다 cURL 핸들添加到多线程세션中</span></span><span>
</span><span><span class="hljs-title function_ invoke__">curl_multi_add_handle</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>, </span><span><span class="hljs-variable">$ch1</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_multi_add_handle</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>, </span><span><span class="hljs-variable">$ch2</span></span><span>);

</span><span><span class="hljs-comment">// 요청을 실행하십시오</span></span><span>
</span><span><span class="hljs-keyword">do</span></span><span> {
    </span><span><span class="hljs-variable">$status</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_multi_exec</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>, </span><span><span class="hljs-variable">$active</span></span><span>);
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$active</span></span><span>) {
        </span><span><span class="hljs-comment">// 요청이 완료 될 때까지 기다리십시오</span></span><span>
        </span><span><span class="hljs-title function_ invoke__">curl_multi_select</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>);
    }
} </span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$active</span></span><span>);

</span><span><span class="hljs-comment">// 각 요청의 실행 상태를 가져옵니다</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$info</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_multi_info_read</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>)) {
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$info</span></span><span>[</span><span><span class="hljs-string">'result'</span></span><span>] === CURLE_OK) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Request to "</span></span><span> . </span><span><span class="hljs-variable">$info</span></span><span>[</span><span><span class="hljs-string">'handle'</span></span><span>] . </span><span><span class="hljs-string">" succeeded.\n"</span></span><span>;
    } </span><span><span class="hljs-keyword">else</span></span><span> {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Request to "</span></span><span> . </span><span><span class="hljs-variable">$info</span></span><span>[</span><span><span class="hljs-string">'handle'</span></span><span>] . </span><span><span class="hljs-string">" failed with error: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">curl_error</span></span><span>(</span><span><span class="hljs-variable">$info</span></span><span>[</span><span><span class="hljs-string">'handle'</span></span><span>]) . </span><span><span class="hljs-string">"\n"</span></span><span>;
    }
}

</span><span><span class="hljs-comment">// 정리</span></span><span>
</span><span><span class="hljs-title function_ invoke__">curl_multi_remove_handle</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>, </span><span><span class="hljs-variable">$ch1</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_multi_remove_handle</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>, </span><span><span class="hljs-variable">$ch2</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_multi_close</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

3. 함수에 대한 자세한 설명

curl_multi_info_read () 다음 필드를 포함하여 요청 정보가 포함 된 배열을 반환합니다.

  • 핸들 : 해당 컬 핸들.

  • 결과 : 실행 결과. 값이 curle_ok 인 경우 요청이 성공적입니다. 요청이 실패하면 해당 오류 코드가 반환됩니다.

  • MSG : 메시지 유형이 반환되었습니다 (일반적으로 curlmsg_done , 요청이 완료되었음을 나타냅니다).

함수는 배열을 반환하고 더 이상 요청 정보가 없으면 NULL을 반환합니다.

4. 여러 요청의 상태를 실시간으로 모니터링합니다.

여러 병렬 요청이 이루어지면 특히 요청간에 직접 의존성이없는 경우 프로그램의 실행 효율이 크게 향상됩니다. curl_multi_info_read ()를 사용하면 각 요청의 상태를 실시간으로 모니터링하여 관련 정보를 제 시간에 얻거나 예외를 처리하거나 요청이 완료 될 때 반환 된 데이터를 얻을 수 있는지 확인할 수 있습니다.

curl_multi_info_read ()를 사용하여 우리는 할 수 있습니다.

  • 요청의 실행 상태를 가져옵니다 . 요청이 성공했는지 확인하십시오.

  • 요청 된 오류 메시지 캡처 : 요청에 실패하면 쉽게 후속 처리를 위해 오류 코드를 즉시 얻을 수 있습니다.

  • 요청 응답 데이터를 실시간으로 가져 오십시오 . 요청이 성공하면 반환 된 데이터를 가져 와서 처리하십시오.

5. 실제 응용 시나리오

http 요청이 배치로 처리되는 일부 시나리오에서는 curl_multi_info_read ()가 특히 중요해집니다. 예를 들어:

  • 배치 데이터 크롤링 : 데이터를 얻고 구문 분석하기 위해 여러 웹 사이트를 동시에 요청하십시오.

  • 병렬 API 호출 : 여러 외부 API를 호출 해야하는 경우 반환 된 데이터를 얻기 위해 요청을 동시에 시작할 수 있습니다.

  • 대규모 동시 요청 : 차단을 피하기 위해 여러 요청을 효율적으로 보내고 처리합니다.

6. 요약

curl_multi_info_read ()는 PHP에서 강력하고 실용적인 도구를 제공하여 여러 컬어 요청의 실행 상태를 얻습니다. 이 기능을 합리적으로 사용함으로써 병렬 요청의 진행 상황을 쉽게 모니터링하고 오류 정보를 캡처하며 요청 결과를 얻을 수 있으며 다중 요청 작업의 실행 효율을 크게 향상시킬 수 있습니다. 크롤러 개발, 배치 데이터 크롤링 또는 병렬 API 호출에 관계없이 Curl_multi_info_read () 는 필수 도구입니다.

  • 관련 태그:

    cURL