source

PHP Curl 라이브러리를 사용하여 HTTP를 지속/유지합니까?

ittop 2023. 9. 4. 20:38
반응형

PHP Curl 라이브러리를 사용하여 HTTP를 지속/유지합니까?

저는 HTTP를 통해 SOLR 색인에 문서를 추가하기 위해 간단한 PHP 라이브러리를 사용하고 있습니다.

3개의 서버가 관련되어 있으며, 현재는 다음과 같습니다.

  1. 인덱싱 작업을 실행하는 PHP 상자
  2. 색인화 중인 데이터가 들어 있는 데이터베이스 상자
  3. 솔라 박스.

80개의 문서/초(100만 개의 문서 중)에서 PHP와 Solr 상자의 네트워크 인터페이스에서 비정상적으로 높은 인터럽트 속도(2000/초, 더욱이 그래프는 거의 동일합니다. PHP 상자의 인터럽트 속도가 급증할 때 Solr 상자에서도 급증합니다.)가 데이터베이스 상자(300/초)에서는 훨씬 적습니다.데이터베이스 서버에 대한 단일 연결을 열고 재사용하기 때문이라고 생각합니다. 그러나 Solr 클라이언트 라이브러리가 작성된 방식 덕분에 모든 Solr 요청이 현재 cURL을 통해 새로운 HTTP 연결을 열고 있습니다.

그래서, 제 질문은:

  1. 킵얼라이브 세션을 열기 위해 cURL을 만들 수 있습니까?
  2. 연결을 다시 사용하려면 무엇이 필요합니까? -- cURL 핸들 리소스를 다시 사용하는 것처럼 간단합니까?
  3. 특별한 cURL 옵션을 설정해야 합니까?(예: HTTP 1.1 강제 적용?)
  4. cURL 킵얼라이브 연결이 있는 gotchas가 있습니까?이 스크립트는 한 번에 몇 시간 동안 실행됩니다. 단일 연결을 사용할 수 있습니까? 아니면 정기적으로 다시 연결해야 합니까?

cURL PHP 설명서(curl_setopt)는 다음과 같이 말합니다.

CURLOPT_FORBID_REUSE-TRUE처리가 완료되면 연결을 강제로 종료하고 재사용을 위해 풀링되지 않습니다.

그래서:

  1. 예, 실제로는 cURL 핸들을 다시 사용하는 한 기본적으로 연결을 다시 사용해야 합니다.
  2. 기본적으로 cURL은 자체적으로 영구 연결을 처리합니다. 일부 특수 헤더가 필요한 경우 CULOPT_HTTPHEADER를 선택하십시오.
  3. 서버는 킵얼라이브 타임아웃(기본 Apache 설치의 경우 15초 또는 100개의 요청 중 먼저 오는 요청)을 보낼 수 있지만, cURL은 이러한 경우 다른 연결을 열기만 합니다.

Curl은 기본적으로 킵얼라이브 헤더를 보내지만 다음과 같습니다.

  1. 사용하여 컨텍스트 생성curl_init()매개 변수 없이.
  2. 컨텍스트를 생존할 범위에 저장(로컬 변수가 아님)
  3. 사용하다CURLOPT_URL컨텍스트에 URL을 전달하는 옵션
  4. 사용하여 요청 실행curl_exec()
  5. 과 않음curl_close()

매우 기본적인 예:

function get($url) {
    global $context;
    curl_setopt($context, CURLOPT_URL, $url);
    return curl_exec($context);
}

$context = curl_init();
//multiple calls to get() here
curl_close($context);
  1. 액세스 중인 서버에서 킵얼라이브를 사용 가능으로 설정하고 최대 킵얼라이브 요청 수가 적절해야 합니다.Apache의 경우 Apache 문서를 참조하십시오.

  2. 동일한 cURL 컨텍스트를 다시 사용해야 합니다.

  3. cURL 컨텍스트를 구성할 때 헤더에 시간 초과가 포함된 keep-alive를 사용하도록 설정합니다.

    curl_setopt($curlHandle, CURLOPT_HTTPHEADER, array(
        'Connection: Keep-Alive',
        'Keep-Alive: 300'
    ));
    

요청의 응답에 관심이 없으면 비동기적으로 요청을 수행할 수 있지만 SOLR 인덱스가 오버로드될 위험이 있습니다.하지만 SOLR이 꽤 빠르다는 것은 의심스럽습니다.

비동기 PHP 호출?

언급URL : https://stackoverflow.com/questions/972925/persistent-keepalive-http-with-the-php-curl-library

반응형