네트워크 요청에 PHP를 사용할 때 CURL 라이브러리는 특히 많은 HTTP 요청이 필요한 시나리오를 처리 할 때 매우 강력한 도구입니다. 성능을 향상시키기 위해 Keep-Alive는 모든 요청에 대한 연결을 재건하는 것을 피할 수있는 매우 중요한 기술로 요청 대기 시간 및 리소스 소비를 크게 줄입니다. 이 기사에서는 Curl_upkeep ()을 사용하여 긴 연결 멀티플렉싱을 달성하고 연결 유지 관리 팁을 제공하는 방법에 대해 자세히 설명합니다.
긴 연결은 HTTP 연결 멀티플렉싱을위한 메커니즘으로, 각 요청에 대한 새 연결을 다시 설정하는 대신 TCP 연결이 여러 HTTP 요청간에 열린 상태를 유지할 수 있습니다. 이는 특히 높은 동시성 시나리오에서 연결 설정의 시간 및 자원 간접비를 크게 줄이고 성능을 향상시킬 수 있습니다.
Curl_upkeep () 는 PHP의 사용자 정의 함수로서 컬 세션에 대한 지속적인 연결을 관리하고 유지하는 데 일반적으로 사용됩니다. PHP의 내장 기능은 아니지만 CURL 라이브러리의 캡슐화를 기반으로하여 연결 멀티플렉싱 기능을 제공합니다. 합리적인 구성을 통해 각 HTTP 요청은 동일한 TCP 연결을 사용하여 반복 연결 설정을 피할 수 있습니다.
curl_upkeep ()을 사용하여 긴 연결 멀티플렉싱을 구현하는 방법을 더 잘 이해하려면 먼저 기본 컬 구성과 연결을 유지하는 방법을 이해해야합니다.
다음은 긴 연결 멀티플렉싱을 구현하는 PHP 코드 예제입니다.
function curl_upkeep($url, $headers = array(), $timeout = 30) {
static $ch = null; // 정적 변수 저장cURL세션
// 如果세션不存在,则初始化一个新的세션
if ($ch === null) {
$ch = curl_init();
// 기본 사항을 설정하십시오cURL옵션
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// 설정Keep-Alive머리,연결이 활성 상태인지 확인하십시오
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); // 사용HTTP/1.1
curl_setopt($ch, CURLOPT_FORBID_REUSE, false); // 연결 다중화를 허용합니다
curl_setopt($ch, CURLOPT_TCP_KEEPALIVE, 1); // 할 수 있게 하다TCP Keep-Alive
}
// 요청을 실행하십시오
curl_setopt($ch, CURLOPT_URL, $url);
$response = curl_exec($ch);
// 요청이 성공했는지 확인하십시오
if ($response === false) {
echo "cURL Error: " . curl_error($ch);
}
return $response;
}
// 예제 사용
$url = "http://m66.net/api/v1/resource";
$response = curl_upkeep($url);
echo $response;
curl_upkeep () 함수는 정적 변수 $ ch를 사용하여 컬 세션을 저장합니다. 이런 식으로, 후속 통화에서,이 세션은 매번 재건을 피하기 위해 재사용 될 수 있습니다.
curl_setopt ($ ch, curlopt_http_version, curl_http_version_1_1)는 HTTP/1.1 프로토콜의 사용을 시행하며, 이는 긴 연결 멀티플렉싱을위한 전제 조건입니다.
curl_setopt ($ ch, curlopt_tcp_keepalive, 1) TCP의 유지 기능을 활성화하여 연결이 여러 요청간에 활성화되도록합니다.
Curl_upkeep ()을 사용하는 경우 Keep-Alive를 활성화하는 것 외에도 다음 연결 유지 관리 팁은 긴 연결의 안정성과 효율성을 향상시키는 데 도움이 될 수 있습니다.
네트워크 변동 또는 서버 문제로 인해 장기 연결이 시간이 초과 될 수 있습니다. 시간 초과 시간을 합리적으로 설정하면 연결이 닫히지 않도록 할 수 있습니다.
curl_setopt($ch, CURLOPT_TIMEOUT, 30); // 설정连接超时为30두번째
일부 특별한 경우, 연결이 예기치 않게 중단 될 수 있습니다. 모든 요청 연결을 다시 설정하지 않도록하려면 각 요청이 실행되기 전에 연결 상태를 확인하고 세션을 다시 시작할 수 있습니다.
if (!is_resource($ch)) {
$ch = curl_init(); // 重新初始化세션
}
자주 요청이 필요한 여러 URL이있는 경우 연결 풀을 사용하여 여러 컬 세션을 관리 할 수 있습니다. 다른 연결을 다중화하면 각 요청에 대한 새로운 연결을 생성하지 않아 효율성이 향상 될 수 있습니다.
$ch1 = curl_init("http://m66.net/api/v1/resource1");
$ch2 = curl_init("http://m66.net/api/v1/resource2");
// 설정其他옵션并요청을 실행하십시오
서버 지원 : 모든 서버가 유지 관리 연결을 지원하는 것은 아니며 서버 측이 HTTP/1.1 및 Keep-Alive를 지원하도록 구성되어야합니다.
최대 연결 수 : 너무 많은 긴 연결로 인해 많은 양의 시스템 리소스를 소비하여 서버 또는 클라이언트의 리소스 소진을 피하기 위해 최대 연결 수의 합리적인 구성을 보장 할 수 있습니다.
연결 닫기 : 긴 연결이 성능을 향상시킬 수 있지만 일부 요청의 경우 너무 긴 연결이 자원 낭비로 이어질 수 있습니다. 따라서 연결의 수명주기를 합리적으로 관리하는 것이 매우 중요합니다.