当前位置:Gxlcms > PHP教程 > 求大神帮忙看看,phpsocket的问题

求大神帮忙看看,phpsocket的问题

时间:2021-07-01 10:21:17 帮助过:22人阅读

  1. $appenStr = $buf = '';
  2. $time = time();
  3. for($i=0;$i<100;$i++){
  4. $buf = socket_read($msgsock, 8192);
  5. if(time() - $time > 5){
  6. break;
  7. }
  8. if($buf){
  9. $appenStr .= $buf;
  10. }else{
  11. break;
  12. }
  13. }
  14. echo $appenStr;

网上看了很多资料,是socket_read这个函数阻塞了,导致的客户端程序一直假死状态,一直等待上面代码的结果 返回。
但是我这样就能取出来数据了。
  1. $buf = socket_read($msgsock, 8192);
  2. $buf .= socket_read($msgsock, 8192);
  3. $buf .= socket_read($msgsock, 8192);
可是总不能算好字节数去取吧。还有下面的代码我也试过了,还是假死,一直在加载中。
  1. $appenStr = $out = '';
  2. $start_time = time();
  3. do{
  4. if (false === ($out = socket_read($msgsock, 8192)))
  5. {
  6. echo ("SOCKET_READ_ERROR: " . socket_strerror(socket_last_error($msgsock)));
  7. $str = "";
  8. break;
  9. }
  10. if (time() - $start_time > 1)
  11. {
  12. echo ("SOCKET_READ_ERROR: Timeout!!!");
  13. $str = "";
  14. break;
  15. }
  16. $appenStr .= $out;
  17. } while ($out != "");

求大神指导


回复讨论(解决方案)

如果在输入流已经读空的情况下,你再去读,就会出现死锁(因为再也读不到东西了)
所以准确的判断是否读空是很重要的
if( trim($buf )){
$appenStr .= $buf;
}else{
break;
}

如果在输入流已经读空的情况下,你再去读,就会出现死锁(因为再也读不到东西了)
所以准确的判断是否读空是很重要的
if( trim($buf )){
$appenStr .= $buf;
}else{
break;
}

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

来人啊,求大神帮忙啊

找到答案了,哈

人气教程排行