作者:小东东5201314 | 来源:互联网 | 2022-09-27 11:44
下面由thinkphp框架教程栏目给大家介绍thinkphp使用mqtt,希望对需要的朋友有所帮助!最近在做一个项目使用到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等级,有兴趣的可以去搜索一下
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
";
}
}
/**
* 要使用命令行运行此方法!!!
* 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的链接 点击下载就行了 ,使用的话
配置使用
打开软件,界面如下图
还可以选择对应的消息解码器(文本格式,JSON格式,Base64编码,十六进制编码,Sparkplug编码)
以上就是关于thinkphp使用mqtt的详细内容,更多请关注其它相关文章!