phpMQTT 内存耗死问题

场景:(订阅)链接不上mqtt的时候,一下代码会出错:

function read($int = 8192, $nb = false){
        //  print_r(socket_get_status($this->socket));
        
        $string="";
        $togo = $int;
        
        if($nb){
            return fread($this->socket, $togo);
        }
        // var_dump($this->socket);
    
        while (!feof($this->socket) && $togo>0) {
              $fread = fread($this->socket, $togo);
              $string .= $fread;
              $togo = $int - strlen($string);
         }
            return $string;
    }

错误分析:链接不到mqtt的时候,$this->socket这个结果为false,while里面的一直会循环,$string的大小会耗死内存。所以加一个判断,按如下代码修改。

if ($this->socket) {
            while (!feof($this->socket) && $togo>0) {
                $fread = fread($this->socket, $togo);
                $string .= $fread;
                $togo = $int - strlen($string);
            }
        }

搞定,又能正常运行了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 7,630评论 1 118
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,554评论 0 17
  • 开始计时调用下面这个方法就可以了。获取验证码的按钮就会开始显示倒计时直到60s后恢复最初状态 实现代码如下: 定义...
    Torin76阅读 889评论 0 1
  • 我已经不太记得当时的感受了,因为时刻太久,本来已经写着一篇的了,但是因为使用马克飞象操作不当导致。数据都没有了。尝...
    肉团先生阅读 12,773评论 13 10