首頁 > php框架 > ThinkPHP > 主體

關於thinkphp使用mqtt

藏色散人
發布: 2020-12-24 15:14:39
轉載
5800 人瀏覽過

下面由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.&#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->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.&#39;/phpMQTT-master/phpMQTT.php&#39;);
        $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(&#39;error&#39;);   //连接失败
        } 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的連結點擊下載就行了,使用的話

##設定使用
開啟軟體,介面如下圖

關於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編碼)

 

以上是關於thinkphp使用mqtt的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板