欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-05-25 14:54:27
...
	$appenStr = $buf = '';	$time = time();	for($i=0;$i 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;
}

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

来人啊,求大神帮忙啊

找到答案了,哈