현재 위치: > 최신 기사 목록> 공유 핸들로 HTTPS 핸드 셰이크 오버 헤드를 줄입니다

공유 핸들로 HTTPS 핸드 셰이크 오버 헤드를 줄입니다

M66 2025-05-27

동시 네트워크 요청에 PHP를 사용하는 경우 HTTPS 핸드 셰이크의 오버 헤드는 종종 성능 병목 현상 중 하나입니다. 각 HTTPS 요청에는 완전한 TLS 핸드 셰이크 프로세스가 필요하며, 이는 단기간에 여러 요청이 시작될 때 전체 응답 속도에 큰 영향을 미칩니다. 다행스럽게도 Curl은 https 핸드 셰이크의 빈도를 줄이고 효율성을 향상시켜 여러 요청간에 연결 데이터를 다중화 할 수있는 Curl_share_init 함수를 제공합니다.

curl_share_init 란 무엇입니까?

curl_share_init는 공유 핸들을 초기화하는 데 사용되는 CURL 확장의 함수입니다. 이 공유 핸들을 통해 다른 컬 세션은 DNS 캐시, SSL 세션, 쿠키 등과 같은 정보를 공유 할 수 있습니다. 이는 여러 요청이 동일한 도메인 이름을 가리키고 공유 SSL 세션이 활성화되면 요청이 이전 HTTPS 핸드 셰이크를 재사용하여 대기 시간 및 CPU 소비를 크게 줄일 수 있음을 의미합니다.

사용의 예 : HTTPS 세션을 공유합니다

다음은 Curl_share_init을 사용하여 HTTPS 세션을 공유하는 실제 예제 코드입니다.

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

// 공유 옵션을 설정하십시오,열려 있는 SSL 세션 공유
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_SSL_SESSION);

// 여러 요청을 준비하십시오
$urls = [
    'https://m66.net/api/endpoint1',
    'https://m66.net/api/endpoint2',
    'https://m66.net/api/endpoint3',
];

foreach ($urls as $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SHARE, $sh); // 앱 공유 핸들

    $response = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Curl error: ' . curl_error($ch) . "\n";
    } else {
        echo "Response from {$url}:\n$response\n\n";
    }

    curl_close($ch);
}

// 공유 핸들을 정리하십시오
curl_share_close($sh);
?>

이 예에서 세 가지 요청은 모두 M66.net 도메인 이름의 다른 인터페이스를 가리키며 모두 동일한 공유 핸들을 통해 SSL 세션을 공유합니다. 이는 첫 번째 요청에 대한 HTTPS 핸드 셰이크를 완료 한 후 후속 요청이 기존 세션을 재사용하여 반복 된 핸드 셰이크 프로세스를 피할 수 있음을 의미합니다.

주목해야 할 것

  1. 스레드 안전 : PHP 자체는 단일 스레드이지만 멀티 스레드 환경에서 공유 핸들을 사용하는 경우 스레드 동기화 문제에주의를 기울여야합니다.

  2. CurlShopt_unshare 사용 : 특정 단계에서 특정 유형의 데이터 (예 : 쿠키 또는 DNS 캐시)를 공해 해야하는 경우 CurlShopt_unshare를 사용할 수 있습니다.

  3. 동일한 호스트의 재사용 만 효과적입니다 . 공유 SSL 세션은 동일한 호스트 (호스트)와 포트 사이에만 효력을 발휘할 수 있으며 도메인 이름에서 공유 할 수 없습니다.

결론적으로

curl_share_init 및 공유 핸들 구성을 합리적으로 사용하면 많은 수의 HTTPS 요청을 만들 때 TLS 핸드 셰이크의 시스템 오버 헤드를 효과적으로 줄일 수 있습니다. 이는 마이크로 서비스 통신, 고주파 API 요청, 데이터 크롤링 및 기타 시나리오에서 상당한 이점이 있습니다. 성능을 향상시킬뿐만 아니라 서버 및 클라이언트의 리소스 소비를 줄이면 PHP 고성능 네트워크 프로그래밍에서 중요한 기술입니다.