여러 컬 요청을 동시에 실행 해야하는 경우 CURL_MULTI_EXEC () 함수를 사용할 수 있습니다. 이 기능을 사용하면 여러 컬 세션을 동시에 실행하여 여러 핸들로 관리 할 수 있습니다.
다음은 Curl_Multi_Exec ()를 사용하여 여러 컬 요청을 처리하는 방법을 보여주는 기본 예입니다.
<?php
// 다중 생성 cURL 핸들
$ch1 = curl_init("https://gitbox.net/api/data1");
$ch2 = curl_init("https://gitbox.net/api/data2");
$ch3 = curl_init("https://gitbox.net/api/data3");
// a cURL 多핸들
$multi_handle = curl_multi_init();
// 싱글을 넣으십시오 cURL 핸들加入到多핸들中
curl_multi_add_handle($multi_handle, $ch1);
curl_multi_add_handle($multi_handle, $ch2);
curl_multi_add_handle($multi_handle, $ch3);
// 다중 실행 cURL 묻다
$running = null;
do {
curl_multi_exec($multi_handle, $running);
} while ($running > 0);
// 각 개인을 닫습니다 cURL 핸들
curl_multi_remove_handle($multi_handle, $ch1);
curl_multi_remove_handle($multi_handle, $ch2);
curl_multi_remove_handle($multi_handle, $ch3);
// 폐쇄多핸들
curl_multi_close($multi_handle);
이 예에서는 Curl_Multi_Exec ()를 통해 세 개의 컬 요청 핸들을 생성하고 동시에 실행합니다. curl_multi_exec ()는 동시에 여러 요청을 수행 할 수 있지만 자원이 올바르게 해제되도록 CURL_MULTI_REMOVE_HANDLE () 및 CURL_MULTI_CLOSE ()를 사용해야합니다.
각 컬 요청이 실행되면 Curl_Close () 함수를 사용하여 해당 리소스를 해제해야합니다. curl_multi_close ()가 전체 멀티 핸들 연결을 닫지 만 별도의 컬 핸들을 자동으로 닫지는 않습니다. 따라서 멀티 태스킹 작업을 완료 한 후 각 컬 핸들을 수동으로 닫아야합니다. 이러한 리소스가 올바르게 해제되지 않으면 메모리 누출이 발생할 수 있습니다.
다음은 curl_close ()를 올바르게 사용하여 각 컬 핸들에 대한 리소스를 무료로 사용하는 개선 된 코드입니다.
<?php
// 다중 생성 cURL 핸들
$ch1 = curl_init("https://gitbox.net/api/data1");
$ch2 = curl_init("https://gitbox.net/api/data2");
$ch3 = curl_init("https://gitbox.net/api/data3");
// a cURL 多핸들
$multi_handle = curl_multi_init();
// 싱글을 넣으십시오 cURL 핸들加入到多핸들中
curl_multi_add_handle($multi_handle, $ch1);
curl_multi_add_handle($multi_handle, $ch2);
curl_multi_add_handle($multi_handle, $ch3);
// 다중 실행 cURL 묻다
$running = null;
do {
curl_multi_exec($multi_handle, $running);
} while ($running > 0);
// 각 개인을 닫습니다 cURL 핸들
curl_close($ch1);
curl_close($ch2);
curl_close($ch3);
// 폐쇄多핸들
curl_multi_close($multi_handle);
이러한 방식으로 각 컬 요청이 완료된 후 관련 리소스를 제 시간에 해제 할 수 있습니다.
자원 릴리스 시간 : 모든 컬 요청이 완료된 후에는 Curl_Close () 에 전화하여 각 개별 컬 리소스를 해제하고 마지막에 여러 핸들을 닫으십시오.
적절한 오류 처리 : 실제 프로젝트에서 네트워크 요청이 실패하여 일부 컬 핸들이 제대로 닫히지 않도록합니다. 요청이 성공 여부에 관계없이 리소스를 해제 할 수 있도록 오류 처리 메커니즘을 추가 할 수 있습니다. 예를 들어:
if ($ch1) {
// 如果묻다成功,폐쇄 cURL 의지
curl_close($ch1);
}
메모리 사용 모니터링 : 여러 동시 커플 요청을 처리 할 때 PHP의 메모리 사용을 모니터링하여 메모리 누출이 발생하지 않도록 할 수 있습니다. 일부 복잡한 응용 분야에서는 GC_COLLECT_CYCLES ()를 사용하여 PHP 메모리 쓰레기의 재활용을 강요하면 메모리 사용을 줄이는 데 도움이 될 수 있습니다.
동시 요청 수를 제한 : Curl_Multi_Exec () 는 동시에 여러 요청을 실행할 수 있지만 과도한 동시 요청은 시스템 리소스의 과도한 소비로 이어질 수 있습니다. 실제 애플리케이션에서는 너무 많은 메모리를 차지하는 데 과도한 컬 요청이 피하기 위해 동시 요청의 수를 적절하게 제한 할 수 있습니다.