IT Share you

PHP Curl 라이브러리를 사용하는 영구 / 유지 HTTP?

shareyou 2020. 12. 8. 20:23
반응형

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 Keepalive 연결에 문제가 있습니까? 이 스크립트는 한 번에 몇 시간 동안 실행됩니다. 단일 연결을 사용할 수 있습니까? 아니면 주기적으로 다시 연결해야합니까?

cURL PHP 문서 ( curl_setopt )에 따르면 다음과 같습니다.

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

그래서:

  1. 예, 실제로 cURL 핸들을 재사용하는 한 기본적으로 연결을 재사용해야합니다.
  2. 기본적으로 cURL은 자체적으로 영구 연결을 처리합니다. 특별한 헤더가 필요한 경우 CURLOPT_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 컨텍스트를 구성 할 때 헤더에서 시간 초과로 연결 유지를 활성화합니다.

    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

반응형