PHP에서 pfsocckopen ()은 하나를 빌드하는 데 사용되는 매우 실용적인 기능입니다. 기존의 fsocckopen () 과 비교할 때, 그 장점은 여러 요청에서 동일한 연결을 재사용 할 수 있다는 점에서, 특히 원격 연결이 자주 필요한 서비스 시나리오에서 성능을 향상시킬 수 있다는 것입니다.
이 기사는 pfsocckopen ()을 사용하여 지속적인 연결을 만들고 사용하는 동안 예방 조치에 집중하는 방법을 자세히 소개합니다.
지속적인 연결은 스크립트가 실행 된 후에도 열려있는 연결입니다. 즉, 다음 스크립트가 실행되면 이전 연결을 사용할 수있는 경우 새 연결을 다시 열고 연결 설정에 리소스 및 시간을 저장하는 대신 재사용됩니다.
$fp = pfsockopen(string $hostname, int $port, int &$errno, string &$errstr, float $timeout);
매개 변수 설명 :
$ hostname : 대상 호스트 이름, IP 주소 또는 도메인 이름 (예 : gitbox.net ) 일 수 있습니다.
$ 포트 : 연결 포트 번호.
$ errno : 연결에 실패하면 오류 번호를 반환하십시오.
$ errstr : 연결에 실패하면 오류 메시지가 반환됩니다.
$ 타임 아웃 : 연결 시간 초과 (초).
다음은 pfsocckopen ()을 사용하여 지속적인 연결을 만드는 예입니다.
<?php
$host = 'gitbox.net';
$port = 80;
$timeout = 30;
$errno = 0;
$errstr = '';
$fp = pfsockopen($host, $port, $errno, $errstr, $timeout);
if (!$fp) {
echo "연결이 실패했습니다:$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: gitbox.net\r\n";
$out .= "Connection: Keep-Alive\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
// 호출되지 않았습니다 fclose,이 연결은 지속적인 연결로 유지됩니다
}
?>
영구 연결의 수명주기는 PHP에 의해 관리됩니다.
pfsocckopen () 에 의해 열린 연결은 스크립트가 끝난 직후에 닫히지 않지만 PHP의 영구 연결 풀에서 관리합니다. 동일한 호스트와 포트가 요청되면 PHP는 연결 재사용을 시도합니다.
연결은 수동으로 닫을 수 없습니다 <br> fclose ()는 pfsocckopen () 에 의해 생성 된 연결을 닫는 데 사용해서는 안되며, 이는 지속적인 연결의 목적을 파괴합니다.
짧은 시간 안에 많은 동시 연결을 사용하지 마십시오 <br> 연결 수가 제한되어 있으므로 지속적인 연결의 오용으로 인해 연결 리소스가 소진 될 수 있습니다.
서버에서 Keep-Alive를 지원해야합니다
서버가 연결을 지원하지 않는 경우 : Keep-Alive , 영구 연결이 적용되지 않습니다.
동일한 서비스를 자주 요청하는 백엔드 스크립트 또는 장기 스크립트 <br> 예를 들어, pfsocckopen ()을 사용하는 연속 로그 쓰기, 메시지 대기, 캐시 동기화 등과 같은 백엔드 작업은 장점을 더 잘 반영 할 수 있습니다.
지속적인 연결을위한 웹 서버 관리 정책 <br> Apache 및 Nginx와 같은 다른 웹 서버는 지속적인 연결을 재사용하는 방법이 다르며 배포 중 실제 환경에 따라 테스트하고 최적화해야합니다.
PFSOCCKOPEN () 은 PHP의 원격 서비스에 연결하는 매우 효율적인 방법이며 특히 동일한 호스트와의 반복 연결이 필요한 응용 프로그램 시나리오에 특히 적합합니다. 그러나 지속적인 연결로 가져온 리소스 재사용은 "무료"가 아닙니다. 이러한 연결을 적절히 관리하고 적용의 한계와 적용 범위를 이해하는 것이 장점을 활용하는 열쇠입니다.
실제 개발에서 pfsocckopen ()을 사용할 때 연결 풀 수, 시간 초과 시간 설정 및 서버의 연결 지원 전략과 같은 요소에주의를 기울여 연결의 안정성과 응용 프로그램의 전반적인 성능을 보장해야합니다.