따라서 요청의 종료는 EOF를 기준으로 판단할 수 있습니다. 다음 코드(PHP)는 매우 일반적입니다.
코드 복사 코드는 다음과 같습니다.
// $fp는 fsockopen()에 의해 생성된 핸들
while(!feof($fp)) {
echo fgets($fp)
}
(참고: 짧은 연결 모드는 헤더에 "Connection: close"로 표시되고 긴 연결은 "Connection: keep-alive"로 표시됩니다. 현재 HTTP/1.0은 짧은 연결을 사용합니다. HTTP/1.1은 기본적으로 긴 연결을 사용합니다.)
HTTP의 긴 연결(영구 연결이라고도 함) 모드는 데이터를 보낸 후 서버의 연결을 끊지 않고 다음 HTTP 요청을 위해 유지합니다. TCP 연결을 공유함으로써 긴 연결의 이점은 분명합니다. 향후 요청에 대한 연결 설정/연결 끊김의 오버헤드를 절약할 수 있습니다. EOF는 TCP 연결이 종료될 때까지(시간 초과 또는 오류) 전송되지 않으므로 위의 방법을 사용하여 HTTP 요청의 종료를 판단할 수 없습니다. 이는 긴 연결을 사용할 때 발생하는 문제이기도 합니다. 현재 두 가지 주요 판단 방법이 있습니다.
(1) 헤더의 Content-Length 필드를 기준으로 합니다. 이 필드는 텍스트의 길이를 나타냅니다. 지정된 길이의 문자를 수신하여 끝을 판단할 수 있습니다.
(2) Transfer-Encoding을 기반으로 Content-Length가 없는 경우. 텍스트가 동적으로 생성될 수 있으므로 서버에서 텍스트 크기를 결정할 수 없으므로 Content-Length가 제공되지 않습니다. 대신 청크 인코딩을 사용하여 텍스트를 조각별로 보냅니다. 각 청크 블록은 헤더와 본문의 두 부분으로 구성됩니다. 헤더의 16진수 숫자는 본문의 길이를 지정합니다. 마지막으로 길이가 0인 청크 블록은 전체 HTTP 본문의 끝을 나타냅니다.
아래에서는 Content-Length가 있을 때 PHP를 사용하여 판단 방법을 구현합니다.
1. Content-Length 값 가져오기
코드 복사 코드는 다음과 같습니다.
$length = 0
$line = ''
while($line !== "rn") {
$line = fgets($fp) ;
if(substr($line, 0, 15) === '콘텐츠 길이:') {
$length = intval(substr($line, 16)); 🎜>}
}
2. 텍스트 가져오기
코드 복사 코드는 다음과 같습니다.
$sum = 0 ;
while($sum < $length) {
$line = fgets($fp)
$sum = strlen($line); >에코 $라인
}
위 내용은 Galaxy s4 active의 내용을 포함하여 Keep-Alive 모드에서 HTTP 요청의 종료를 판단하는 Galaxy s4 active의 구현 코드를 소개한 내용입니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.