socket小問題

來源:互聯網
上載者:User
fputs($fp_send, $send_all);
stream_set_timeout($fp_send, 30);
$result = fread($fp_send, 8192);

我在本機運行時,可以取到完整的結果。

可我傳到伺服器上後,只能除到幾百個字元。

請問要如何配製呢?是要個伺服器配製什嗎?

還有沒有其它方法?

環境:LAMP

註:不要用 while,會很慢。


回複討論(解決方案)

你的網路太慢了

你的網路太慢了

是說網路太慢,所以用while很慢嗎?

除去網路的因素,還有沒有方法一次性讀取檔案所有內容呢?
完整的檔案也才4千多位元組。

我傳到伺服器上面後只能讀到一千多位元組。

本機用fread可以讀到所有字元。

註:本機用戶端也是跟外網通訊。

你有 stream_set_timeout($fp_send, 30);
那麼 30 秒還取不回資料,難道不是網路太慢了嗎?
如果我說是你兩邊的程式有問題,那你可能早就跳腳了

本機測試代碼片斷:

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

代碼二,用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為外網伺服器位址
問題:
代碼一的結果很快,代碼二非常慢,會逾時。
請問是什麼原因,代碼有問題嗎?


本機測試代碼片斷:

代碼一,用fread:

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


代碼二,用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為外網伺服器位址
問題:
代碼一的結果很快,代碼二非常慢,會逾時。
請問是什麼原因,代碼有問題嗎?

註:完整取到的資料量為4000位元組。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.