Rumah  >  Artikel  >  pembangunan bahagian belakang  >  求大神帮忙看看,php socket的问题

求大神帮忙看看,php socket的问题

WBOY
WBOYasal
2016-06-23 13:23:53820semak imbas

	$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;

网上看了很多资料,是socket_read这个函数阻塞了,导致的客户端程序一直假死状态,一直等待上面代码的结果 返回。
但是我这样就能取出来数据了。
$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;
    }

谢谢。可我试了下,还是有那问题

来人啊,求大神帮忙啊

找到答案了,哈

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:php 常用经验Artikel seterusnya:PHP学习笔记7:错误和异常处理