时间:2021-07-01 10:21:17 帮助过:22人阅读
- $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( trim($buf )){
$appenStr .= $buf;
}else{
break;
}
如果在输入流已经读空的情况下,你再去读,就会出现死锁(因为再也读不到东西了)
所以准确的判断是否读空是很重要的
if( trim($buf )){
$appenStr .= $buf;
}else{
break;
}
来人啊,求大神帮忙啊
找到答案了,哈