요청간에 HTTP 영구 연결을 사용할 수있는 방법이 있습니까? mysql, redis, pg에 대한 다른 확장이 있으므로 모든 요청에서 사용되는 연결 풀을 만드는 방법이있는 CURL 확장이 보이지 않습니다.PHP와 영구 HTTP 연결
내가보기에 동일한 요청 내에서만 지속적인 HTTP 연결을 사용할 수 있습니다.
Silviu
요청간에 HTTP 영구 연결을 사용할 수있는 방법이 있습니까? mysql, redis, pg에 대한 다른 확장이 있으므로 모든 요청에서 사용되는 연결 풀을 만드는 방법이있는 CURL 확장이 보이지 않습니다.PHP와 영구 HTTP 연결
내가보기에 동일한 요청 내에서만 지속적인 HTTP 연결을 사용할 수 있습니다.
Silviu
PHP의 pecl_http 확장 libcurl에을 사용하고 재사용 할 수있는 지속적인 TCP 연결을 열 수 있습니다 :
$client = new http\Client('curl', $persistentHandleID);
$request = new http\Client\Request('GET', 'http://example.com/');
$client->enqueue($request);
$client->send();
$response = $client->getResponse($request);
을 가능하게 다른 PHP 요청 중에 같은 PHP 프로세스 (실행중인 다른 $client
하는 경우)가 동일한 호스트에 액세스하고 동일한 $persistentHandleID
을 공유하면 이전과 동일한 TCP 연결을 통해 HTTP 요청을 보냅니다. HTTP와
$client->setOptions(['forbid_reuse' => true, … ]);
HTTP에는 Keep-Alive 및 파이프 라이닝이라는 개념이 있습니다. Keep-Alive를 사용하면 여러 개의 HTTP 요청 및 응답에서 하나의 TCP 연결을 사용할 수 있습니다. 이를 통해 브라우저는 하나의 TCP 연결에 모든 리소스 (예 : 이미지, 스크립트 등)가있는 웹 페이지를로드 할 수 있으므로 연결 설정을 중단하고 오버 헤드를 줄일 수 있습니다. CURL은 기본값으로을 사용하고 Connection: keep-alive
을 헤더에 추가합니다. 서버는 최대 요청 및 연결이 열려있는 기간 동안 구성됩니다. 하지만 여전히 요청 - 응답 모드로 작동합니다.
파이프 라이닝을 사용하면 응답을 받기 전에 여러 요청을 할 수 있습니다. 파이프 라이닝은 널리 구현되지 않으며 클라이언트와 서버 모두 작동해야합니다. CURL에서 사용하려면 클라이언트를 위해 라이브러리를 구현하는 라이브러리 (일부 라이브러리가 있음)를 찾아야하며, 다시 서버가이를 활용해야합니다.
CURL 앱이 연결 유지 헤더를 보내는 지 확실하지 않은 경우 http 프록시 또는 패킷 스니퍼를 사용하여 트래픽을 검사하십시오.
/1.1 영구 연결 기본없이'연결은 다음과 같습니다 : '헤더 인 PHP 모듈이 종료되거나 $client
이 Connection: Close
또는 forbids further use of the connection가 전송 될 때까지 때까지
TCP 연결이 살아 유지됩니다 그 필요합니다. PHP 프로그램이해야 할 일은 후속 요청을 할 때 같은 컬 핸들을 재사용하는 것입니다. –
내 질문에 : 거기에 요청 사이의 HTTP 영구 연결을 사용할 수있는 방법이 또한 마지막 게시물을 내가 worte : 나는 당신이 볼 수있는 동일한 요청 내에서만 지속적인 HTTP 연결을 사용할 수 있습니다. PHP 스크립트 수명주기 때문에 나는 어떻게 당신이 연결 풀을 사용할 수 있는지 보지 못합니다. – silviu
감사합니다. Joe,이게 내가 찾고있는거야! – silviu