PHP Curl 라이브러리를 사용하는 영구 / 유지 HTTP?
HTTP를 통해 SOLR 인덱스에 문서를 추가하기 위해 간단한 PHP 라이브러리를 사용하고 있습니다.
현재 다음과 같은 3 개의 서버가 관련되어 있습니다.
- 인덱싱 작업을 실행하는 PHP 상자
- 인덱싱되는 데이터를 보관하는 데이터베이스 상자
- 솔러 박스.
초당 80 개의 문서 (문서 100 만 개 중)에서 PHP 및 solr 상자의 네트워크 인터페이스 (2000 / 초)에서 비정상적으로 높은 인터럽트 비율을 발견했습니다. 게다가 그래프는 거의 동일합니다. PHP 박스 스파이크의 속도, Solr 박스에서도 스파이크),하지만 데이터베이스 박스 (300 / 초)에서는 훨씬 적습니다. 나는 이것이 단순히 데이터베이스 서버에 대한 단일 연결을 열고 재사용하기 때문이라고 생각하지만 Solr 클라이언트 라이브러리가 작성된 방식 덕분에 현재 모든 Solr 요청이 cURL을 통해 새 HTTP 연결을 열고 있습니다.
그래서 제 질문은 :
- 킵 얼라이브 세션을 열기 위해 cURL을 만들 수 있습니까?
- 연결을 재사용하려면 무엇이 필요합니까? -cURL 핸들 리소스를 재사용하는 것만 큼 간단합니까?
- 특별한 cURL 옵션을 설정해야합니까? (예 : 강제 HTTP 1.1?)
- cURL Keepalive 연결에 문제가 있습니까? 이 스크립트는 한 번에 몇 시간 동안 실행됩니다. 단일 연결을 사용할 수 있습니까? 아니면 주기적으로 다시 연결해야합니까?
cURL PHP 문서 ( curl_setopt )에 따르면 다음과 같습니다.
CURLOPT_FORBID_REUSE
-TRUE
처리가 완료되면 연결을 강제로 닫고 재사용을 위해 풀링하지 않습니다.
그래서:
- 예, 실제로 cURL 핸들을 재사용하는 한 기본적으로 연결을 재사용해야합니다.
- 기본적으로 cURL은 자체적으로 영구 연결을 처리합니다. 특별한 헤더가 필요한 경우 CURLOPT_HTTPHEADER를 확인하십시오.
- 서버는 연결 유지 제한 시간을 보낼 수 있습니다 (기본 Apache 설치의 경우 15 초 또는 100 개의 요청 중 먼저 도래하는 시간).하지만 cURL이 발생하면 다른 연결이 열립니다.
Curl은 기본적으로 연결 유지 헤더를 보내지 만 다음과 같습니다.
curl_init()
매개 변수없이 사용하여 컨텍스트를 작성하십시오 .- (로컬 변수가 아닌) 존속 할 범위에 컨텍스트 저장
CURLOPT_URL
옵션을 사용 하여 URL을 컨텍스트에 전달하십시오.- 다음을 사용하여 요청을 실행하십시오.
curl_exec()
- 연결을 닫지 마십시오
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);
연결 유지에 액세스하는 서버에서 연결 유지가 활성화되어 있어야하며 최대 연결 유지 요청이 합리적이어야합니다. Apache의 경우 apache 문서를 참조하십시오 .
동일한 cURL 컨텍스트를 재사용해야합니다.
cURL 컨텍스트를 구성 할 때 헤더에서 시간 초과로 연결 유지를 활성화합니다.
curl_setopt($curlHandle, CURLOPT_HTTPHEADER, array( 'Connection: Keep-Alive', 'Keep-Alive: 300' ));
요청의 응답에 신경 쓰지 않는 경우 비동기식으로 수행 할 수 있지만 SOLR 인덱스가 오버로드 될 위험이 있습니다. 나는 그것을 의심하지만, SOLR은 꽤 빠르다.
참고 URL : https://stackoverflow.com/questions/972925/persistent-keepalive-http-with-the-php-curl-library
'IT Share you' 카테고리의 다른 글
자바 스크립트로 div에 img 요소 추가 (0) | 2020.12.08 |
---|---|
Git에서 '--no-ff'병합 옵션을 사용하는 경우 (0) | 2020.12.08 |
Android에서 외부 글꼴 사용 (0) | 2020.12.08 |
신호의 스펙트럼 분석을 수행 할 때 푸리에 변환 (FFT)의 단위 (0) | 2020.12.08 |
어떤 프로토콜? (0) | 2020.12.08 |