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

WBOY
发布: 2016-06-23 13:23:53
原创
886 人浏览过

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

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

来人啊,求大神帮忙啊

找到答案了,哈

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!