현재 위치: > 최신 기사 목록> curl_upkeep ()을 사용한 후에 연결이 자주 재건됩니다.

curl_upkeep ()을 사용한 후에 연결이 자주 재건됩니다.

M66 2025-06-02

PHP 프로그램을 개발할 때 Curl_upkeep () 함수를 사용하면 HTTP 요청 된 연결을 효과적으로 관리하고 유지할 수 있습니다. 그러나 많은 개발자들은 연결이 종종 재건 되어이 기능을 사용할 때 성능 저하가 발생한다는 것을 알게됩니다. 이 기사는 연결을 자주 재건하고 솔루션을 제공 할 수있는 몇 가지 이유를 분석합니다.

1. HTTP 헤더가 잘못되었습니다

HTTP 요청을 할 때 요청 헤더가 올바르게 설정되도록하는 것이 중요합니다. 특히 연결유지 관리 헤더, 이러한 헤더가 올바르게 설정되지 않으면 서버는 각 요청이 새로운 연결이라고 생각할 수 있으므로 연결을 자주 재 구축합니다.

해결책:
curl_upkeep () 함수에서 올바른 HTTP 요청 헤더를 설정하십시오.

 $ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://m66.net/some-api-endpoint");
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    "Connection: Keep-Alive",  // 연결 상태를 유지하십시오
    "Keep-Alive: 300"  // 연결을 유지하도록하십시오300두번째
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

"Connection : Keep-Alive""Keep-Alive : 300"을 설정하면 서버가 매번 재건축하는 대신 최대한 연결을 재사용 할 수 있습니다.

2. 요청 시간 초과 설정이 너무 짧습니다

curl_upkeep () 함수는 기본적으로 특정 시간 초과 한도를 설정합니다. 요청 시간 초과 설정이 너무 짧고 서버 응답이 제 시간에 반환되지 않으면 연결이 닫히므로 요청이 요청 될 때마다 연결이 다시 설정됩니다.

해결책:
curlopt_timeoutcurlopt_connecttimeout 옵션의 시간을 조정하고 짧은 시간 초과로 인한 자주 연결 재구성을 피하기 위해 대기 시간을 늘리십시오.

 curl_setopt($ch, CURLOPT_TIMEOUT, 60);  // 최대 요청 시간을 설정하십시오
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);  // 연결 시간 초과 시간을 설정하십시오

3. 서버 측은 지속적으로 연결을 가능하게하지 않습니다

일부 서버에는 지속적인 연결이 활성화되지 않을 수 있습니다 (유지). 클라이언트가 연결을 유지하도록 설정 되더라도 서버는 기능을 지원하지 않으면 연결을 자주 연결하고 재건합니다.

해결책:
서버 측에서 지속적인 연결이 활성화되어 있는지 확인하십시오. 서버 구성에 액세스 할 수있는 권한이있는 경우 Apache 또는 Nginx의 구성을 확인하여 Keep-Alive가 활성화되어 있는지 확인하십시오.

Apache 구성 파일에 다음 설정이 있는지 확인하십시오.

 KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15

4. 요청은로드 밸런서에 의해 처리됩니다

부하 균형 환경에 응용 프로그램이 배포 된 경우로드 밸런서는 연결을 자주 재건 할 수 있습니다. 로드 밸런서는 때때로 세션 손실 또는 구성 문제로 인해 서버에 대한 연결을 닫고 다시 설정합니다.

해결책:
로드 밸런서 구성을 확인하거나 세션 고정 상태가 활성화되거나 부하 밸런서 동작을 자주 연결하지 않도록 조정하십시오.

5. 클라이언트 및 서버 프로토콜이 일치하지 않습니다

클라이언트와 서버간에 사용 된 프로토콜이 일치하지 않으면 (예 : HTTP/1.1 및 HTTP/2), 자주 연결 재건이 발생할 수도 있습니다. 특히 HTTP/2는 더 나은 연결 멀티플렉싱 기능을 제공하며 클라이언트와 서버가 프로토콜을 올바르게 협상하지 않으면 연결의 지속성에 영향을 줄 수 있습니다.

해결책:
Curlopt_http_version을 사용하여 프로토콜 버전을 명시 적으로 지정하십시오.

 curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);  // 또는 CURL_HTTP_VERSION_2

6. 요청할 때마다 다른 인스턴스를 사용하십시오.

각 요청에 따라 인스턴스가 재 구선되면 각 요청마다 새 연결이 설정됩니다. 멀티 플렉스 연결을 위해 멀티플렉스 인스턴스 또는 지속적인 연결 풀 (예 : CURL_MULTI_* 함수)을 사용하는 것을 고려할 수 있습니다.

해결책:
연결을 유지하기 위해 매번 컬을 초기화하고 인스턴스를 재사용하지 마십시오.