$appenStr = $buf = ''; $time = time(); for($i=0;$i<100;$i++){ $buf = socket_read($msgsock, 8192); if(time() - $time > 5){ break; } if($buf){ $appenStr .= $buf; }else{ break; } } echo $appenStr;
$buf = socket_read($msgsock, 8192); $buf .= socket_read($msgsock, 8192); $buf .= socket_read($msgsock, 8192);しかし、それを取得するためのバイト数を計算することはできません。次のコードも試してみましたが、それでもアニメーションが一時停止され、読み込みが続けられました。
$appenStr = $out = ''; $start_time = time(); do{ if (false === ($out = socket_read($msgsock, 8192))) { echo ("SOCKET_READ_ERROR: " . socket_strerror(socket_last_error($msgsock))); $str = ""; break; } if (time() - $start_time > 1) { echo ("SOCKET_READ_ERROR: Timeout!!!"); $str = ""; break; } $appenStr .= $out; } while ($out != "");
入力ストリームが空のときに再度読み込むと、デッドロックが発生します(入力ストリームが空になっているため、何も読み取れなくなります) )
したがって、空を読み取るかどうかを正確に判断することが非常に重要です
if 入力ストリームが空に読み取られたときに、再度読み取ろうとすると、デッドロックが発生します (もう何も読み取れないため)
空の
if(rim($buf) ; を読み取るかどうかを正確に判断することが重要です。しかし、試してみましたが、まだ問題があります
誰か、助けてください