小さなソケットの問題

WBOY
WBOYオリジナル
2016-06-23 14:14:221027ブラウズ

fputs($fp_send, $send_all);
stream_set_timeout($fp_send, 30);
$result = fread($fp_send, 8192); このマシンで実行すると、完全な結果が得られます。

しかし、サーバーにアップロードした後、削除できたのは数百文字だけでした。

どうやって準備しますか?サーバー構成が必要ですか?

他に方法はありますか?

環境: LAMP

注: 非常に遅くなりますので、 while は使用しないでください。


ディスカッションに返信 (解決策)

ネットワークが遅すぎます

ネットワークが遅すぎます

ネットワークが遅すぎるため、while を使用すると非常に遅いということですか?

ネットワーク要因とは別に、ファイルのすべての内容を一度に読み取る方法はありますか?
完全なファイルはわずか 4 キロバイトを超えます。

サーバーにアップロードした後、1,000 バイト以上しか読み取れませんでした。

このマシンは fread を使用してすべての文字を読み取ることができます。

注: ローカル クライアントは外部ネットワークとも通信します。


stream_set_timeout($fp_send, 30); があります

30 秒以内にデータを取得できない場合は、ネットワークが遅すぎるためではありませんか?

あなたの両側のプログラムに問題があると言ったら、あなたはずっと前に飛びついたかもしれません

ローカル テスト コード スニペット:

コード 1、fread を使用します:
$fp = fsockopen($server, $port, $errno, $errstr ,30);
fputs($fp, $send_all);
$result = fread($fp, $result);

コード 2、fgets を使用します:
$fp = fsockopen($server, $port, $errno, $errstr, 30);
fputs($fp, $send_all);
$ result = '';
while(!feof($fp)) {
$result.= fgets($fp,1024)
}
print_r($result); 注: $server は外部ネットワーク サーバーのアドレスです。
質問:
コード 1 結果は非常に高速です。コード 2 は非常に遅く、タイムアウトします。
コードに問題があるのでしょうか?




ネイティブ テスト コード スニペット:

コード 1、fread を使用:

$fp = fsockopen($server, $port, $errno, $errstr ,30);fputs($fp, $send_all);stream_set_timeout($fp, 30);$result = fread($fp, 5000);print_r($result);


コード 2、fgets を使用:

$fp = fsockopen($server, $port, $errno, $errstr ,30);fputs($fp, $send_all);stream_set_timeout($fp, 30);$result = '';while(!feof($fp)) {   $result.= fgets($fp,1024);}print_r($result);


注: $server は外部サーバーのアドレスです
質問:
コード 1 の結果すぐに、コード 2 は非常に遅く、タイムアウトになります。
コードに問題があるのでしょうか?

注: 取得されるデータの完全な量は 4000 バイトです。

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