直接上干货!
<?php
/*
* 作者 : duerhong
* QQ : 1186969412
* QQ群 : 536633782
*/
namespace MQTT\Controller;
use Think\Controller;
/**
* 该类主要为订阅,建议订阅代码和发布代码不要写在同一个类中,避免修改造成不必要的误改。
* 每次更新该类后需要重启mqtt订阅,否则新的改动不会生效。
* 请在相应的位置放入phpMQTT的库,\Vendor\PhpMQTT\PhpMQTT
* 库代码:https://github.com/bluerhinos/phpMQTT/blob/master/phpMQTT.php
* 类库使用的时候注意命名空间,类名称命名要和thinkphp的保持一致,不然会报错
* ...
*/
class SubController extends Controller{
public function _initialize(){
header("Content-Type:text/html; charset=utf-8");
// 客户端id 可以用随机数
$this->client="sub_123";
// mqtt主机 主机,请配置为自己的主机
$this->host = C('MQTT_HOST');
// mqtt端口
$this->port = C('MQTT_PORT');
// 密钥 用于证书配置,如果需要ssl认证,则必须填写
$this->cert= 'ca.pem';
// mqtt账号
$this->username ="";
// mqtt密码
$this->password = "";
// 订阅主题 订阅的主题,注意使用的主题一定要是mqtt配置过的主题,比如百度天工需要策略认证过的
// 自己学习的时候,可以随意自定义,一般跟发布主题一致便可以收到消息
// 如要要接受所有主题,请使用#
$this->topics_name="sub topic";
}
//运行 并且订阅
function index(){
// 创建mqtt实例
$this->mqtt = new \Vendor\PhpMQTT\PhpMQTT($this->host,$this->port,$this->client,$this->cert);
// 若mqtt链接失败
if(!$this->mqtt->connect(true,NULL,$this->username,$this->password)) {
echo "mqtt链接失败!";
}
// 注意:这里qos的设置,有些broker限制了使用0,则可以用1试试。百度天工测试代码 则为1
$topics[$this->topics_name] = array("qos" => 0, "function" =>array($this,"message"));
$this->mqtt->subscribe($topics,0);
while ($this->mqtt->proc()) {
}
}
// 回调消息
public function message($topic,$msg){
echo "收到订阅消息 $topic:$msg \n\r";
}
}
订阅请在命令行单独起进程运行
TP5+laravel等有问题可以联系作者
大早上赶时间整理的代码,如果有问题联系qq:1186969412