>  기사  >  백엔드 개발  >  Keep-Alive 모드에서 HTTP 요청의 끝을 결정하는 Galaxy s4 활성 구현 코드

Keep-Alive 모드에서 HTTP 요청의 끝을 결정하는 Galaxy s4 활성 구현 코드

WBOY
WBOY원래의
2016-07-29 08:46:301194검색

따라서 요청의 종료는 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 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.