下面由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等級,有興趣的可以去搜尋一下
<?php namespace 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); } }
執行後回傳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的詳細內容。更多資訊請關注PHP中文網其他相關文章!