현재 위치: > 최신 기사 목록> curl_upkeep () 함수 분석 : 사용 및 사용되지 않을 때 시간 소모적 연결의 상세한 비교

curl_upkeep () 함수 분석 : 사용 및 사용되지 않을 때 시간 소모적 연결의 상세한 비교

M66 2025-06-23

PHP에서 Curl Extension은 클라이언트와 서버간에 데이터를 교환 할 수있는 매우 중요한 도구입니다. 우리는 일반적으로 Curl을 사용하여 HTTP 요청을 보내거나 서버에서 데이터를 얻습니다. 그러나 여러 요청이 이루어지면 연결의 설정 시간을 최적화하는 것이 특히 중요해집니다.

curl_upkeep () 함수는 특히 중복 HTTP 요청에서 HTTP 연결을 유지하고 다중화하는 기능입니다. 요청할 때마다 연결을 다시 설정하지 않고 연결 설정으로 인한 대기 시간을 줄이면 성능이 향상됩니다. 이 기사는 Curl_UpKeep ()를 사용할 때 및이 기능을 사용하지 않고 시간 소모적 연결 생성을 자세히 비교할 것입니다.

curl_upkeep () 의 역할

curl_upkeep () 는 서버와 지속적으로 연결을 유지하는 사용자 정의 함수 (또는 특정 라이브러리를 통해 구현 된 함수)입니다. 핵심 기능은 특히 동일한 서버로 요청을 자주 보낼 필요가있을 때 연결 풀을 지속하여 TCP 연결을 반복적으로 설정하는 오버 헤드를 줄이는 것입니다. 효과가 특히 분명합니다.

지속적인 연결을 구현하는 방법은 무엇입니까?

일반적으로 HTTP 프로토콜은 상태가 없으므로 각 요청마다 새로운 TCP 연결이 설정됩니다. 매번 연결을 다시 설정하지 않도록 연결을 지속적으로 유지하기 위해 일부 매개 변수를 설정할 수 있습니다. 예를 들어, Curl은 연결을 설정하여 연결을 유지합니다.

 $ch = curl_init();

// 활성 상태를 유지하도록 연결을 설정합니다
curl_setopt($ch, CURLOPT_URL, 'https://m66.net/api/endpoint');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Connection: keep-alive'
));

// 요청을 실행하십시오
$response = curl_exec($ch);
curl_close($ch);

위의 코드는 M66.net 과의 연결을 계속 활성화하여 요청할 때마다 연결을 다시 설정하지 않습니다.

curl_upkeep () 사용 및 사용하지 않는 시간이 소요되는 비교

Curl_upkeep () 가 가져온 성능 향상을 더 잘 이해하기 위해 아래의 몇 가지 실제 예와 비교할 것입니다.

시나리오 1 : curl_upkeep ()를 사용하지 마십시오 (각 요청마다 새 연결이 설정 됨)

이 경우 요청이 전송 될 때마다 TCP 연결을 다시 설정해야합니다. 이 연결 설정 프로세스에는 일반적으로 DNS 해상도, 3 회 핸드 셰이크 및 기타 작업이 포함되므로 시간이 오래 걸립니다.

 $ch = curl_init();

// 지속적인 연결을 사용하지 마십시오,요청할 때마다 연결을 다시 설정하십시오
curl_setopt($ch, CURLOPT_URL, 'https://m66.net/api/endpoint');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// 요청을 실행하십시오
$response = curl_exec($ch);
curl_close($ch);

이 예에서 Curl은 Curl_Exec ()가 호출 될 때마다 새로운 연결을 만듭니다. DNS 해상도 및 연결 설정이 약 200ms를 소비한다고 가정하십시오.

시나리오 2 : curl_upkeep () 사용 (다중 연결)

이 경우 연결 풀이 다중화되어 요청 될 때마다 연결을 다시 설정하지 않습니다. curlopt_forbid_reusecurlopt_keep_sending을 설정하여 멀티플렉싱 연결의 효과를 달성 할 수 있습니다. 연결 재사용을 유지하는 것이 동일한 서버에만 유효하므로 다른 도메인 이름에 자주 액세스하면 효과가 크게 줄어 듭니다.

 $ch = curl_init();

// 연결 상태를 유지하도록 설정
curl_setopt($ch, CURLOPT_URL, 'https://m66.net/api/endpoint');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FORBID_REUSE, true); // 연결 재사용 비활성화
curl_setopt($ch, CURLOPT_KEEP_SENDING, true); // 연결 상태를 유지하십시오

// 요청을 실행하십시오
$response = curl_exec($ch);
curl_close($ch);

멀티플렉싱 연결의 경우 여러 요청을 보내야하는 경우 연결이 다중화되어 DNS 해상도, 3 핸드 셰이크 및 기타 프로세스를 저장하여 각 요청의 시간 소모를 크게 줄입니다.

시간이 많이 걸리는 비교

요청 수 curl_upkeep () (ms)를 사용하지 않음 curl_upkeep () (ms) 사용
1 200ms 100ms
10 2000ms 1000ms
100 20000ms 10000ms

위 표에서 알 수 있듯이 Curl_upkeep ()을 사용하여 연결을 멀티 플렉스 한 후, 각 요청에 소비되는 시간은 특히 요청 횟수가 증가 할 때 멀티플렉스 연결의 장점이 더 분명합니다.

요약

Curl_upkeep () 함수는 TCP 연결을 유지하고 다중화하여 빈번한 연결 설정의 오버 헤드를 크게 줄여 대기 시간을 줄이고 성능을 향상시킵니다. 특히 요청을 동일한 서버로 여러 번 전송 해야하는 시나리오에서는 효과가 더욱 두드러집니다.

따라서 PHP 프로젝트에서 동일한 서버와 자주 통신하는 경우 Curl_upkeep ()을 사용하여 연결 관리를 최적화하고 불필요한 연결 설정 시간을 피하는 것이 좋습니다.