ホームページ  >  記事  >  PHPフレームワーク  >  mqtt を使用した thinkphp について

mqtt を使用した thinkphp について

藏色散人
藏色散人転載
2020-12-24 15:14:295805ブラウズ

以下は、thinkphp フレームワーク チュートリアルのコラムから、mqtt を使用した thinkphp の紹介です。困っている友人の役に立てば幸いです。

最近、mqttを使ったプロジェクトを進めていて、ネット上でサンプルをたくさん見たのですが、よく理解できませんでした(たぶん私がバカなので)が、後で解決したのでここに記録します。あまり上手ではないので忘れないように。もし書き間違いがあればメッセージを残してアドバイスをいただければ幸いです。

最初の準備は環境と枠組みです。また、ほとんど同じネイティブのものを使用してください。

環境私は contOs7 を使用しており、それをインストールしています。mosquitto 環境で使用される mqtt インストール チュートリアルはここにあります (パスワードを設定することを忘れないでください。関連する権限は設定されていません)

フレームワーク TP5.0 フレームワークを使用しています

Connect 以下は開発プロセスです

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 で移動し、次に phpindex.php module/controller/method# を実行します。

##実行後に成功に戻ります。テストしたい場合は、mqtt.fx ソフトウェアのアドレスを使用できます。アドレスは http://www.jensd.de/apps/mqttfx/ です。私は 1.7.1 を使用しています。クリックすると、下に Windows リンクがあり、クリックしてダウンロードできます。これを使用する場合、

構成は

を使用してソフトウェアを開きます。インターフェイスは次のとおりです

mqtt を使用した thinkphp について

次に、[接続の編集]

mqtt を使用した thinkphp について

を選択し、対応するプロファイル名、ブローカー アドレス、およびブローカー ポートを入力します (変更した場合、デフォルトは 1883) , クライアント ID は、[生成] ボタンをクリックすると自動的に生成できます。編集後、「保存」をクリックして編集インターフェースを終了します。

mqtt を使用した thinkphp について

その後、メイン インターフェイスのドロップダウン ボックスに移動し、構成したプロファイル名 (172.16.0.121) を選択し、[接続] ボタンをクリックして接続します。サービスに。接続が成功したら、[購読] オプションをクリックし、下のドロップダウン ボックスでトピックを選択し (または、i like mqtt などのトピックを自分で作成し)、[購読] ボタンをクリックします。

mqtt を使用した thinkphp について

[公開] オプションに戻り、ドロップダウン ボックスでトピックを選択します (または、[購読] オプションと同じトピックを作成します)。ここで、下の入力領域に送信したいメッセージを書き込むことができます (wo ai mqtt など、サブスクライバーのメッセージ表示では中国語が文字化けします)。ここでのメッセージは複数の形式をサポートしており、[公開] ボタンをクリックします。

mqtt を使用した thinkphp について

最後に、[購読] オプションに戻り、メッセージが正常に受信されたかどうかを確認します。図に示すように、パブリッシャー (wo ai mqtt) によって送信されたメッセージは、無事に受信されました。

mqtt を使用した thinkphp について

対応するメッセージ デコーダ (テキスト形式、JSON 形式、Base64 エンコード、16 進エンコード、Sparkplug エンコード) を選択することもできます。

以上がmqtt を使用した thinkphp についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。