curl_share_init () 는 공유 리소스를 초기화하는 기능입니다. DNS 캐시, 쿠키 데이터, 파일 디스크립터 등과 같은 특정 리소스를 공유 할 수있는 여러 컬 세션 (즉, 다중 컬 요청)이 공유 할 수 있습니다. 이러한 방식으로 여러 동시 HTTP 요청은 동일한 연결 및 세션 데이터를 공유 할 수 있으므로 각 요청에 대한 연결을 재개하고 효율성을 향상시키는 문제를 피할 수 있습니다.
자원 공유 : 다중 컬 세션은 DNS 캐시, 쿠키, SSL 세션 등을 공유하여 중복 DNS 쿼리 또는 쿠키 전송 작업을 줄일 수 있습니다.
성능 최적화 : 공유 연결 및 세션 정보는 요청 당 리소스 소비를 줄이고 중복 네트워크 연결 설정 프로세스를 피합니다.
동시 요청 지원 : curl_share_init ()는 다중 스레드 동시 요청 중에 리소스 공유를 실현하는 데 도움이되어 다중 스레드 요청이보다 효율적입니다.
여러 HTTP 요청 작업을 수행하는 PHP 스크립트를 개발하고 Curl_share_init ()를 사용하여 리소스 공유를 달성하기를 희망한다고 가정 해 봅시다. 기본 구현 단계는 다음과 같습니다.
공유 리소스 초기화 :
curl_share_init ()를 사용하여 공유 리소스를 초기화하고 여러 컬 세션과 공유하십시오.
각 요청에 대한 공유 리소스 설정 :
각 컬 요청에서 curl_share_setopt ()를 사용하여 공유 리소스를 세션에 바인딩하십시오.
요청을 실행하십시오 .
curl_multi_exec ()를 사용하여 여러 컬 요청을 병렬로 실행하십시오.
자원 정리 :
요청이 완료된 후 공유 리소스 및 컬 세션이 릴리스됩니다.
<?php
// 공유 리소스 초기화
$share = curl_share_init();
// 공유 리소스를 설정합니다,좋다 DNS 은닉처,cookie 기다리다
curl_share_setopt($share, CURLSHOPT_SHARE, CURLSHARE_SSL);
$urls = [
"http://m66.net/api/endpoint1",
"http://m66.net/api/endpoint2",
"http://m66.net/api/endpoint3",
];
// 만들다 cURL 여러 세션 핸들
$multi_handle = curl_multi_init();
$curl_handles = [];
foreach ($urls as $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SHARE, $share); // 공유 리소스를 설정합니다
curl_multi_add_handle($multi_handle, $ch);
$curl_handles[] = $ch;
}
// 모든 것을 수행하십시오 cURL 묻다
$running = null;
do {
curl_multi_exec($multi_handle, $running);
curl_multi_select($multi_handle);
} while ($running > 0);
// 获取每个묻다的响应内容
foreach ($curl_handles as $ch) {
$response = curl_multi_getcontent($ch);
echo "Response: " . $response . "\n";
curl_multi_remove_handle($multi_handle, $ch);
curl_close($ch);
}
// 공유 자원을 정리하십시오 cURL 세션
curl_share_close($share);
curl_multi_close($multi_handle);
?>
공유 리소스 초기화 : curl_share_init ()를 사용하여 공유 리소스 핸들을 만듭니다. 그런 다음 curl_share_setopt ()를 사용하여 공유 리소스 핸들 (예 : SSL 연결, 쿠키, DNS 캐시 등)에서 공유하는 리소스 유형을 설정하십시오.
공유 리소스 설정 : 각 컬 세션에서 각 세션에서 Curl_SetOpt ($ ch, curlopt_share, $ share)를 통해 이전에 초기화 된 공유 리소스를 공유하도록 설정하십시오.
동시 요청 실행 : curl_multi_exec () 및 curl_multi_select ()를 사용하여 여러 HTTP 요청을 병렬로 처리합니다. curl_multi_exec ()는 모든 요청을 실행하는 반면 Curl_multi_Select ()는 요청이 완료되기를 기다리는 데 사용됩니다.
응답 처리 및 청소 : 모든 요청이 실행 된 후 각 요청의 응답 내용은 CURL_MULTI_GETCONTENT () 를 통해 얻을 수 있으며 정리 작업은 무료 리소스로 수행됩니다.
연결 오버 헤드 감소 : 각 컬 세션은 동일한 연결 풀을 공유하므로 특히 성능 향상이 특히 많은 동시 요청이있을 때 모든 요청을 다시 설정하는 오버 헤드가 크게 줄어 듭니다.
스레드 안전 문제 : CURL_SHARE_INIT () 및 관련 작업은 다중 스레드 환경에서 리소스 공유를 지원하지만, 스레드 충돌을 피하기 위해 동시 액세스가 적절하게 관리되도록해야합니다. 일반적으로 여러 컬 세션간에 공유하는 것은 스레드 안전입니다.
메모리 및 리소스 관리 : 많은 요청의 경우 메모리 누출을 피하기 위해 요청이 완료된 후 공유 리소스 및 컬 세션이 정리되도록하십시오.
다중 스레드 PHP 환경에서 Curl_share_init () 함수는 효율적인 리소스 공유 및 성능 최적화를 달성하는 데 중요한 도구입니다. 공유 자원을 합리적으로 사용하면 중복 연결 설정 및 자원 폐기물을 피할 수 있으며 동시 요청의 효율성을 개선 할 수 있습니다. 특히 높은 동시성 시나리오에서 빈번한 HTTP 요청이 필요한 응용 프로그램의 경우 CURL 의 공유 메커니즘은 성능 및 응답 속도를 효과적으로 향상시킬 수 있습니다.