curl_share_init () 함수는 공유 리소스의 컬 핸들을 만드는 데 사용됩니다. 이 공유 리소스 핸들을 통해 여러 컬 세션 (예 : 다중 컬 핸들)은 쿠키, DNS 쿼리 캐시 등과 같은 동일한 리소스를 공유 할 수 있습니다.이 메커니즘의 주요 목적은 DNS 쿼리, 쿠키 전달 및 기타 작업과 같은 중복 네트워크 요청을 피하는 것입니다.
여러 컬 세션을 사용하는 경우 각 세션은 도메인 이름을 다시 재산하고 쿠키 및 기타 리소스를 얻어야 할 수도 있습니다. 자원을 공유함으로써 이러한 중복 작업을 피할 수 있습니다.
curl_share_init () 함수를 통해 CURL 세션간에 일부 기본 리소스를 공유 할 수 있으며, 이는 여러 요청 간의 중복 작업을 줄일 수 있습니다. 멀티 스레드 요청을 할 때 HTTP 요청 (예 : DNS 쿼리, 쿠키 등)의 많은 작업이 공유되며 공유 리소스를 사용하면 이러한 작업의 오버 헤드가 크게 줄어 듭니다.
여러 동시 요청을하고 있다고 가정하고 각 요청에는 독립적 인 DNS 쿼리, 쿠키 저장 및 기타 작업이 필요하므로 이러한 작업 자체는 특정 성능 오버 헤드를 유발합니다. 이러한 작업이 다른 요청간에 공유 될 수 있다면 요청 실행 효율성을 크게 개선하고 요청 당 시간 소비를 줄일 수 있습니다.
다음은 Curl_share_init () 함수를 사용하는 간단한 예입니다. 리소스를 공유하여 PHP 멀티 스레드 요청의 성능을 향상시키는 방법을 보여줍니다.
<?php
// 공유 리소스 초기화
$ch_share = curl_share_init();
curl_share_setopt($ch_share, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
curl_share_setopt($ch_share, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
// 동시 요청을 설정하십시오 URL 목록
$urls = [
'http://m66.net/api/data1',
'http://m66.net/api/data2',
'http://m66.net/api/data3',
];
// 다중 생성 cURL 핸들
$multi_handle = curl_multi_init();
$curl_handles = [];
foreach ($urls as $url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SHARE, $ch_share); // 공유 리소스 사용
curl_multi_add_handle($multi_handle, $ch);
$curl_handles[] = $ch;
}
// 동시 요청을 수행하십시오
$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 . "\n";
curl_multi_remove_handle($multi_handle, $ch);
}
// 자원을 닫으십시오
curl_multi_close($multi_handle);
curl_share_close($ch_share);
?>
공유 리소스 초기화 : 먼저 Curl_share_init () 를 통해 공유 리소스 핸들 $ CH_SHARE를 만듭니다. 그런 다음 curl_share_setopt () 를 통해 공유 리소스 유형을 설정하고 쿠키 및 DNS 데이터와 같은 공유 할 리소스를 지정합니다.
동시 요청에 대한 URL 목록 설정 : 동시에 요청할 여러 URL을 나타내는 URL 배열을 정의합니다.
컬 핸들 만들기 : 각 URL에 대해 컬 핸들을 생성하고 Curlopt_share 옵션을 이전에 생성 된 공유 리소스 핸들 $ CH_SHARE 로 설정합니다.
동시 실행 요청 : curl_multi_init ()를 사용하여 멀티 핸들 컬 리소스 $ multi_handle을 생성하고 리소스에 여러 개의 컬 핸들을 추가합니다. 동시 요청은 모든 요청이 완료 될 때까지 curl_multi_exec () 를 통해 실행됩니다.
결과를 얻고 출력하십시오 : curl_multi_getContent () 를 통해 각 요청의 반환 결과를 가져 와서 출력하십시오.
닫기 자원 : 요청을 완료 한 후 curl_multi_close ()를 사용하여 멀티 핸들 리소스를 닫고 curl_share_close () 를 통해 공유 리소스 핸들을 닫으십시오.
curl_share_init ()를 사용하면 각 요청에 대해 독립적 인 DNS 쿼리 및 쿠키를 피합니다. 특정 성능 개선 효과는 다른 네트워크 환경과 요청 수를 기반으로 측정해야합니다. 많은 동시 요청의 경우 중복 DNS 쿼리 및 리소스로드를 줄이면 요청의 전반적인 성능을 크게 향상시킬 수 있습니다.
그러나 curl_share_init ()가 모든 시나리오에서 작동하지는 않습니다. 요청 된 컨텐츠가 완전히 다르고 각 요청 된 자원을 독립적으로 처리 해야하는 경우 공유 리소스를 사용해도 상당한 성능이 향상되지 않을 수 있습니다. 공유 컬 리소스를 사용하면 여러 요청에 특정 리소스를 공유 해야하는 경우에만 작동합니다.
Curl_share_init () 함수는 특히 공유 리소스 (예 : 쿠키, DNS 캐시 등)와 관련된 경우 멀티 스레드 요청에서 성능 향상을 제공합니다. 공유 리소스를 합리적으로 활용하여 중복 작업을 줄이고 동시 요청의 효율성을 최적화 할 수 있습니다. 그러나 curl_share_init ()를 사용하면 공유 리소스가 필요하지 않은 상황에서는 성능이 크게 향상되지 않을 수 있습니다. 따라서이 기능을 사용할지 여부는 특정 요구 사항 및 시나리오를 기반으로 결정해야합니다.