搜尋
首頁php框架ThinkPHP關於thinkphp使用mqtt

關於thinkphp使用mqtt

Dec 24, 2020 pm 03:14 PM
mqttthinkphp

下面由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。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),