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 킵얼라이브 연결이 있는 gotchas가 있습니까?이 스크립트는 한 번에 몇 시간 동안 실행됩니다. 단일 연결을 사용할 수 있습니까? 아니면 정기적으로 다시 연결해야 합니까?
cURL PHP 설명서(curl_setopt)는 다음과 같이 말합니다.
CURLOPT_FORBID_REUSE
-TRUE
처리가 완료되면 연결을 강제로 종료하고 재사용을 위해 풀링되지 않습니다.
그래서:
- 예, 실제로는 cURL 핸들을 다시 사용하는 한 기본적으로 연결을 다시 사용해야 합니다.
- 기본적으로 cURL은 자체적으로 영구 연결을 처리합니다. 일부 특수 헤더가 필요한 경우 CULOPT_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 컨텍스트를 구성할 때 헤더에 시간 초과가 포함된 keep-alive를 사용하도록 설정합니다.
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
'source' 카테고리의 다른 글
PowerShell - 호출된 응용 프로그램의 프로세스 ID 가져오기 (0) | 2023.09.04 |
---|---|
socket.socket vs.socket.send. (0) | 2023.09.04 |
"동적 유형 텍스트 스타일을 사용하여 글꼴 요구를 자동으로 조정" 경고의 의미는 무엇입니까? (0) | 2023.09.04 |
스위프트 만드는 법UI 목록이 자동으로 스크롤됩니까? (0) | 2023.09.04 |
가운데 텍스트로 원을 그리는 방법은? (0) | 2023.09.04 |