關于thinkphp使用mqtt

下面由thinkphp框架教程欄目給大家介紹thinkphp使用mqtt,希望對需要的朋友有所幫助!

最近在做一個項目使用到mqtt,網上看到很多例子 都看的不太明白(大概因為我笨)不過后來還是處理好了,就在這里記錄下以免忘記? 因為不是很精通,看到有哪里寫的錯誤的可以留言指點

首先準備工作就是? 環境? 以及框架,各位也可以用原生,差不太多

環境? ?我使用的是contOs7? 安裝了mosquitto環境 使用的mqtt? 安裝教程在 這里(記得設置密碼,有關權限的還沒做,本文章就沒寫)

框架? ? 我使用的是TP5.0的框架

接下里就是開發流程

立即學習PHP免費學習筆記(深入)”;

1? ?下載MQTT類然后放到了項目根目錄下的 extend文件夾 ,本來想放在csdn資源讓大家下 賺個1積分辛苦費。沒想到默認就是5積分,懶得去git而且分多的歡迎點擊資源地址?,然后把Git地址給大家了?Git地址是:https://github.com/bluerhinos/phpMQTT,

2? ? 然后引入MQtt類

? ?接下來是發布和訂閱的代碼塊? ? 關于MQTT信息Qos等級,有興趣的可以去搜索一下??

<?php namespace appindexmodel; use BluerhinosphpMQTT; use thinkModel; 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.&#39;/phpMQTT-master/phpMQTT.php&#39;);         $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-&gt;publish($id,?$message,?0); ????????????$mqtt-&gt;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-&gt;connect(true,?NULL,?$username,?$password))?{ ????????????exit('error');???//連接失敗 ????????}?else?{ ????????????echo?"success";?//連接成功 ????????} ????????//topics["topic"]??為接受的主題名??需要和發送的主題名一致??否則會訂閱不到 ????????//訂閱信息?Qos為信息登記,需要和發送的等級一致 ????????$topics["topic"]?=?array("qos"?=&gt;?0,?"function"?=&gt;array($this,"onMessage"));  ????????$mqtt-&gt;subscribe($topics,?0);  ????????//死循環監聽 ????????while($mqtt-&gt;proc()){  ????????} ????????$mqtt-&gt;close(); ????} ????/** ?????*?在此處接MQtt的信息?進行業務處理 ?????*?@param?$topic ?????*?@param?$msg ?????*/ ????function?onMessage($topic,$msg){ ????	$msg?=?json_decode($msg,true); ????????//我把數據傳遞到了另一個方法進行處理??可以在處理完邏輯業務之后?再次調用發布方法??去給訂閱方發布消息 ????????$this-&gt;index($msg);??? ????} }

切記 使用訂閱的時候 一定要在命令行下運行? ,thinkphp執行示例先cd到項目的public目錄然后執行? ??php index.php 模塊/控制器/方法

執行后返回 sucess? ? 如果要測試的話 可以使用??mqtt.fx 軟件 地址為?http://www.jensd.de/apps/mqttfx/? 我使用的是1.7.1? 點進去后下面有個windows的鏈接 點擊下載就行了 ,使用的話

配置使用
打開軟件,界面如下圖

關于thinkphp使用mqtt

然后選擇編輯連接

關于thinkphp使用mqtt

填寫相應的Profile Name,Broker Address和Broker Port(如果修改過的話,默認是1883),Client ID可以點擊Generate按鈕自動生成。編輯完之后點擊保存退出編輯界面。

關于thinkphp使用mqtt

之后到主界面的下拉框選擇剛才配置的Profile Name名稱(172.16.0.121),然后點擊Connect(連接)按鈕進行服務連接。連接成功后,再點擊Subscribe(訂閱)選項,在下方的下拉框中選擇主題(或者自己創建一個主題,如i like mqtt),之后點擊后面的Subscribe(訂閱)按鈕。

關于thinkphp使用mqtt

再回到Publish(發布)選項,在下拉框中選擇一個主題(或創建一個與Subscribe(訂閱)選項中一樣的主題)。現在可以在下方的輸入區域寫上你要發送的消息(如wo ai mqtt,中文在訂閱者的消息顯示上會亂碼),這里的消息支持多種格式,然后點擊Publish(發布)按鈕。

關于thinkphp使用mqtt

最后再回來Subscribe(訂閱)選項中查看消息是否接收成功,如圖所示已經成功接收到發布者發送的消息(wo ai mqtt)。

關于thinkphp使用mqtt

還可以選擇對應的消息解碼器(文本格式,JSON格式,Base64編碼,十六進制編碼,Sparkplug編碼)

?

以上就是關于

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享