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

搞定,又能正常运行了。

你可能感兴趣的:(phpMQTT 内存耗死问题)