ホームページ >バックエンド開発 >PHPチュートリアル >ソケットのタイムアウトに関する問題

ソケットのタイムアウトに関する問題

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-13 12:01:581923ブラウズ

ソケットのタイムアウトの問題
最近fsockopenをよく使うのでタイムアウトの設定に注目してみたところ、設定できる箇所がたくさんあるのですが、Googleでは開けない箇所が分かりません。 Baidu ではそれができないため、この基本的な問題については Yu Tongren に助けを求めなければなりませんでした。
コードを見てください。
if (!$fp = @fsockopen($host, $this->port?$this->port:80, $errno, $errstr, $timeout1)) {
fclose($fp);
return false;
}
socket_set_timeout($fp, $timeout2);

while (!feof($fp)) {
$ line = fgets($fp, 4096);
fclose($fp);
Break;
}
質問: 1. 上記には 2 つのタイムアウトがあります: $timeout1 と $timeout2、この 2 つはタイムアウトの違いは何ですか?前者は接続の確立のみに使用され、後者はデータの読み取りのみに使用されますか?
2. $timeout2 は、fsockopen から fclose までの時間制限を制御するために使用されますか、それとも各 fget のデータ制限を制御するために使用されますか?
3. fgets($fp, 4096) の 2 番目のパラメーター (4096) を 1 億秒などの非常に大きな値に設定した場合、それに応じて $timeout2 をより大きな値に設定する必要がありますか?
4. バイナリデータを読み取るために fread が使用されることは知っていますが、file_get_contents のカーネルは fread または fgets を使用しますか?バイナリ ファイルを読み取るときに、fgets と fread を試しましたが、どちらもうまく機能します。この場合、テキストを読み取ることでバイナリ ファイルを読み書きできますか?
質問はたくさんありますが、どれも非常に基本的なものです。私の同僚で読み書き能力を向上できる人はいますか?
------解決策----------------------
socket_set_timeout は stream_set_timeout
1 のエイリアスです。はい
2. 各ブロックが読み取られるまでの待ち時間
つまり、$timeout2 以内にデータが読み取られなかった場合、失敗としてカウントされます
3. デフォルトは無限待機です。待ち時間を制限したい場合は、当然自分の行動に責任を持つことになります
4. fread は、最後のブロックを除いて、データをバイナリ モードで読み取るために使用されます。各ブロックの長さは同じです
fgets。テキストモードでデータを読み取るために使用されます。n に達すると停止します。また、🎜> に遭遇したときにファイルが終了した場合でも使用されます。

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