ホームページ  >  記事  >  バックエンド開発  >  Keep-Alive モードで HTTP リクエストの終了を判断する実装コード_PHP チュートリアル

Keep-Alive モードで HTTP リクエストの終了を判断する実装コード_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:25:46823ブラウズ

したがって、リクエストの終了は EOF に基づいて判断できます。次のコード (PHP) が非常に一般的です:

コードをコピー コードは次のとおりです:

// $fp は、によって生成されたハンドルです。 fsockopen()
while(! feof($fp)) {
echo fgets($fp);
}

(注: 短い接続モードにはヘッダーに「Connection: close」とマークが付けられ、長い接続モードには現在、HTTP/1.0 はデフォルトで短い接続を使用し、HTTP/1.1 はデフォルトで長い接続を使用します。)
長い接続 (永続的な接続とも呼ばれます) モードのサーバーは、接続を切断しません。データ送信後に接続を維持しますが、それを次の HTTP リクエストまで保持します。これを使用すると、TCP 接続を共有することで、後続のリクエスト中の接続の確立/切断のオーバーヘッドが節約できることが明らかです。 TCP 接続が終了(タイムアウトまたはエラー)するまで EOF は送信されないため、上記の方法では HTTP リクエストの終了を判断できません。これは、長い接続を使用する場合にも発生する問題です。現在、主に 2 つの判断方法があります:
(1) ヘッダーの Content-Length フィールドに基づく。このフィールドはテキストの長さを示し、指定された長さの文字を受信することに基づいて終了を判断できます。
(2) Content-Lengthがない場合、Transfer-Encodingに基づく。テキストが動的に生成される可能性があるため、サーバーがテキストのサイズを判断できない場合があるため、Content-Length が提供されず、代わりにチャンク エンコーディングが使用されてテキストを部分ごとに送信します。各チャンク ブロックは、ヘッダーとボディの 2 つの部分で構成されます。ヘッダー内の 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 $sum += strlen($line);


http://www.bkjia.com/PHPjc/324034.html

www.bkjia.com

tru​​e
http://www.bkjia.com/PHPjc/324034.html

技術記事

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。