您好,欢迎访问一九零五行业门户网

关于thinkphp使用mqtt

下面由thinkphp框架教程栏目给大家介绍thinkphp使用mqtt,希望对需要的朋友有所帮助!
最近在做一个项目使用到mqtt,网上看到很多例子 都看的不太明白(大概因为我笨)不过后来还是处理好了,就在这里记录下以免忘记  因为不是很精通,看到有哪里写的错误的可以留言指点
首先准备工作就是  环境  以及框架,各位也可以用原生,差不太多
环境   我使用的是contos7  安装了mosquitto环境 使用的mqtt  安装教程在 这里(记得设置密码,有关权限的还没做,本文章就没写)
框架    我使用的是tp5.0的框架
接下里就是开发流程
1   下载mqtt类然后放到了项目根目录下的 extend文件夹 ,本来想放在csdn资源让大家下 赚个1积分辛苦费。没想到默认就是5积分,懒得去git而且分多的欢迎点击资源地址 ,然后把git地址给大家了 git地址是:https://github.com/bluerhinos/phpmqtt,
2    然后引入mqtt类
   接下来是发布和订阅的代码块    关于mqtt信息qos等级,有兴趣的可以去搜索一下  
<?phpnamespace app\index\model;use bluerhinos\phpmqtt;use think\model;class mqtt extends model{ /** * mqtt发送信息 * @param $id 发布消息的id 订阅id需要与发布id一致才能接受信息 topic为发布给全部 * @param $info 发布的信息 */ public function pus($id,$info){ //使用require_once 引入 mqtt 的类 require_once (extend_path.'/phpmqtt-master/phpmqtt.php'); $host = ""; // change if necessary ip $port = 1883; // change if necessary 端口默认1883 $username = ""; // set your username 用户名 $password = ""; // set your password 密码 $message = $info; //要发送的消息 //phpmqtt有四个参数:主机,端口,客户端id,证书。官网这里的案例没写证书,请参考phpmqt类 //没有证书的时候只能连接1883端口,不能连接8883端口。 //第三个参数为客户端id 不可重复 $mqtt = new phpmqtt($host, $port, "clientid" . rand()); //连接 if ($mqtt->connect(true, null, $username, $password)) { //发送信息 第三个参数为qos服务质量等级 //qos0  发送者只发送一次消息,不进行重试,broker不会返回确认消息。在qos0情况下,broker可能没有接受到消息 //qos1  发送者最少发送一次消息,确保消息到达broker,broker需要返回确认消息puback。在qos1情况下,broker可能接受到重复消息 //qos2  qos2使用两阶段确认来保证消息的不丢失和不重复。在qos2情况下,broker肯定会收到消息,且只收到一次 $mqtt->publish($id, $message, 0); $mqtt->close(); //关闭 } else { echo "fail or time out<br />"; } } /** * 要使用命令行运行此方法!!! * think5.0 运行方法为 cd到public 目录 然后 php index.php 模块/控制器/方法 * 该类主要为订阅,建议订阅代码和发布代码不要写在同一个类中,避免修改造成不必要的误改。 * 每次更新该类后需要重启mqtt订阅,否则新的改动不会生效。 * 请在相应的位置放入phpmqtt的库 * 库代码:https://github.com/bluerhinos/phpmqtt/blob/master/phpmqtt.php * 类库使用的时候注意命名空间,类名称命名要和thinkphp的保持一致,不然会报错 */ public function sub(){ require_once (extend_path.'/phpmqtt-master/phpmqtt.php'); $server = ""; // change if necessary 服务器ip $port = 1883; // change if necessary 端口 一般是1883 $username = ""; // set your username mosquitto设置的用户名 $password = ""; // set your password mosquitto设置的密码 $client_id = "clientx9293670xxctr".rand(1213333123,123123333); //你的连接客户端id $mqtt = new phpmqtt($server, $port, $client_id); //进行连接 if(!$mqtt->connect(true, null, $username, $password)) { exit('error'); //连接失败 } else { echo "success"; //连接成功 } //topics["topic"] 为接受的主题名 需要和发送的主题名一致 否则会订阅不到 //订阅信息 qos为信息登记,需要和发送的等级一致 $topics["topic"] = array("qos" => 0, "function" =>array($this,"onmessage")); $mqtt->subscribe($topics, 0); //死循环监听 while($mqtt->proc()){ } $mqtt->close(); } /** * 在此处接mqtt的信息 进行业务处理 * @param $topic * @param $msg */ function onmessage($topic,$msg){ $msg = json_decode($msg,true); //我把数据传递到了另一个方法进行处理 可以在处理完逻辑业务之后 再次调用发布方法 去给订阅方发布消息 $this->index($msg); }}
切记 使用订阅的时候 一定要在命令行下运行  ,thinkphp执行示例先cd到项目的public目录然后执行    php index.php 模块/控制器/方法执行后返回 sucess    如果要测试的话 可以使用  mqtt.fx 软件 地址为 http://www.jensd.de/apps/mqttfx/  我使用的是1.7.1  点进去后下面有个windows的链接 点击下载就行了 ,使用的话
配置使用
打开软件,界面如下图
然后选择编辑连接
填写相应的profile name,broker address和broker port(如果修改过的话,默认是1883),client id可以点击generate按钮自动生成。编辑完之后点击保存退出编辑界面。
之后到主界面的下拉框选择刚才配置的profile name名称(172.16.0.121),然后点击connect(连接)按钮进行服务连接。连接成功后,再点击subscribe(订阅)选项,在下方的下拉框中选择主题(或者自己创建一个主题,如i like mqtt),之后点击后面的subscribe(订阅)按钮。
再回到publish(发布)选项,在下拉框中选择一个主题(或创建一个与subscribe(订阅)选项中一样的主题)。现在可以在下方的输入区域写上你要发送的消息(如wo ai mqtt,中文在订阅者的消息显示上会乱码),这里的消息支持多种格式,然后点击publish(发布)按钮。
最后再回来subscribe(订阅)选项中查看消息是否接收成功,如图所示已经成功接收到发布者发送的消息(wo ai mqtt)。
还可以选择对应的消息解码器(文本格式,json格式,base64编码,十六进制编码,sparkplug编码)
以上就是关于thinkphp使用mqtt的详细内容。
其它类似信息

推荐信息