현재 위치: > 최신 기사 목록> PHP의 Curl_share_init 함수를 사용하여 멀티 스레드 확장에 대한 공유 리소스 지원을 추가하는 방법?

PHP의 Curl_share_init 함수를 사용하여 멀티 스레드 확장에 대한 공유 리소스 지원을 추가하는 방법?

M66 2025-06-11

특히 동시 요청을 처리 할 때 특히 동시 데이터 크롤링 또는 API 호출이 PHP와 함께 사용되는 시나리오에서 중복로드 및 연결 비용을 무시할 수 없습니다. curl_share_init 함수는 libcurl에서 제공하는 고급 기능입니다. 이를 통해 여러 컬 세션이 DNS 캐시, SSL 세션 및 쿠키와 같은 특정 리소스를 공유하여 다중 스레드 환경에서 성능을 향상시킬 수 있습니다.

이 기사는 PHP에서 Curl_share_init을 사용하여 CURL 리소스 공유를 구현하고 예제와 함께 사용하는 방법을 설명하는 방법을 소개합니다.

curl_share_init 란 무엇입니까?

curl_share_init는 libcurl에서 공유 핸들 ( CURL 공유 핸들 )을 초기화하기 위해 제공하는 함수입니다. 이 핸들은 여러 CURL 요청과 데이터를 공유 할 수 있으므로 반복 초기화, 구문 분석 또는 협상 프로세스를 피할 수 있습니다.

해당 시나리오

  • 다중 스레드 또는 다중 프로세스 크롤러 사용과 같은 높은 동시 요청 시나리오;

  • 동일한 호스트에 액세스하는 여러 요청과 DNS 캐시를 공유해야합니다.

  • 동일한 쿠키 또는 SSL 세션을 사용한 여러 요청.

PHP에서 사용하는 방법?

PHP에서는 curl_share_init () , curl_share_setopt ()curl_setopt () 와 같은 함수를 사용하여 공유 리소스를 구현할 수 있습니다. 다음은 완전한 예입니다.

샘플 코드

 <?php

// 공유 핸들을 초기화하십시오
$sh = curl_share_init();

// 공유 옵션을 설정하십시오,우리는 여기서 공유합니다 Cookie 그리고 DNS
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);

// 다중 생성 cURL 세션
$urls = [
    'https://m66.net/api/data1',
    'https://m66.net/api/data2',
];

$chs = [];
foreach ($urls as $url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // 공유 핸들 바인드
    curl_setopt($ch, CURLOPT_SHARE, $sh);
    $chs[] = $ch;
}

// 초기화 multi handle
$mh = curl_multi_init();

// 모든 요청을 추가하십시오 multi handle
foreach ($chs as $ch) {
    curl_multi_add_handle($mh, $ch);
}

// 모든 요청을 수행하십시오
$running = null;
do {
    curl_multi_exec($mh, $running);
    curl_multi_select($mh);
} while ($running > 0);

// 결과를 얻으십시오
foreach ($chs as $ch) {
    $content = curl_multi_getcontent($ch);
    echo "응답 내용:\n" . $content . "\n\n";
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch);
}

// 정리
curl_share_close($sh);
curl_multi_close($mh);
?>

주목해야 할 것

  1. 공유 잠금 유형 제한 : 한 번에 하나의 잠금 유형 만 설정할 수 있습니다 (예 : curl_lock_data_cookiecurl_lock_data_dns ). Curl_share_setopt는 여러 유형을 설정할 때 여러 번 호출해야합니다.

  2. 스레드 안전 문제 : CURL_SHARE는 C 언어의 멀티 스레드 시나리오에서 사용되지만 PHP 자체는 스레드 안전이 아니므 로이 기능은 주로 동시성의 리소스 최적화 (예 : CURL_MULTI_* )를 시뮬레이션하는 데 사용됩니다.

  3. 오류 처리 : 실제 개발에서 Curl_ERRNOCURL_ERROR 검사를 추가하여 요청 실행이 정상인지 확인해야합니다.

요약

Curl_share_init 은 다중 요청 시나리오에서 성능을 크게 최적화 할 수있는 강력한 도구입니다. 여러 CURL 요청간에 리소스를 공유함으로써 네트워크 요청의 오버 헤드를 줄일뿐만 아니라 시스템의 전반적인 효율성을 향상시킵니다. PHP의 Curl_multi 와 함께 고성능 동시 시스템을위한 견고한 토대를 마련 할 수 있습니다.

타사 인터페이스에 연결하거나 효율적인 크롤러 시스템을 구축 해야하는 경우 Curl_Share 가 가져온 최적화 효과를 시도 할 수도 있습니다.