Maison  >  Article  >  cadre php  >  À propos de thinkphp utilisant mqtt

À propos de thinkphp utilisant mqtt

藏色散人
藏色散人avant
2020-12-24 15:14:295811parcourir

Ce qui suit est une introduction à thinkphp utilisant mqtt à partir de la colonne du didacticiel du framework thinkphp. J'espère que cela sera utile aux amis dans le besoin !

Récemment, je travaillais sur un projet utilisant mqtt. J'ai vu de nombreux exemples sur Internet mais je ne parvenais pas à les comprendre (probablement parce que je suis stupide). Mais je l'ai résolu plus tard et je l'ai enregistré ici. pour ne pas l'oublier car je ne suis pas très compétent, si vous voyez des erreurs d'écriture, vous pouvez laisser un message pour conseil

La première préparation est l'environnement et le framework Vous pouvez également utiliser le natif. un, c'est presque pareil

Environnement J'utilise contOs7 et je l'ai installé Le tutoriel d'installation de mqtt utilisé dans l'environnement mosquitto est ici (pensez à définir le mot de passe, les autorisations n'ont pas encore été faites, donc cet article a pas été écrit)

Framework J'utilise le framework TP5.0

Connect Voici le processus de développement

1 Téléchargez la classe MQTT et placez-la dans le dossier d'extension dans le répertoire racine du projet, je voulais à l'origine le mettre dans les ressources csdn afin que tout le monde puisse gagner 1 point pour son travail acharné. De manière inattendue, la valeur par défaut est de 5 points. Si vous êtes trop paresseux pour accéder à Git et que vous avez trop de points, veuillez cliquer sur l'adresse de la ressource et donner à chacun l'adresse Git : https://github.com/bluerhinos. /phpMQTT,

2 Ensuite, présentation de la classe MQtt

Vient ensuite le bloc de code pour la publication et l'abonnement Concernant le niveau Qos des informations MQTT, si vous êtes intéressé, vous pouvez le rechercher

.
<?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);   
    }
}

N'oubliez pas de l'exécuter sur la ligne de commande lors de l'utilisation des abonnements, pensez d'abord à l'exemple d'exécution de PHP dans le répertoire public du projet, puis exécutez php index.php module/controller/method

après l'exécution, renvoyez le succès Si vous souhaitez tester, vous pouvez utiliser l'adresse du logiciel mqtt.fx est http://www.jensd.de/apps/mqttfx/ J'utilise après 1.7.1. en cliquant dessus, il y a un lien Windows ci-dessous et cliquez pour télécharger. Si vous souhaitez l'utiliser

La configuration utilise
pour ouvrir le logiciel

À propos de thinkphp utilisant mqtt

puis sélectionnez Modifier la connexion

À propos de thinkphp utilisant mqtt

et remplissez le nom de profil, l'adresse du courtier et le port du courtier correspondants (si modifié, la valeur par défaut est 1883), L'ID client peut être généré automatiquement en cliquant sur le bouton Générer. Après l'édition, cliquez sur Enregistrer pour quitter l'interface d'édition.

À propos de thinkphp utilisant mqtt

Ensuite, allez dans la liste déroulante de l'interface principale et sélectionnez le nom de profil que vous venez de configurer (172.16.0.121), puis cliquez sur le bouton Connecter pour vous connecter à le service. Une fois la connexion établie, cliquez sur l'option S'abonner, sélectionnez le sujet dans la liste déroulante ci-dessous (ou créez vous-même un sujet, tel que j'aime mqtt), puis cliquez sur le bouton S'abonner.

À propos de thinkphp utilisant mqtt

Retournez à l'option Publier et sélectionnez un sujet dans la liste déroulante (ou créez un sujet identique à celui de l'option S'abonner). Vous pouvez maintenant écrire le message que vous souhaitez envoyer dans la zone de saisie ci-dessous (par exemple, wo ai mqtt, le chinois sera tronqué sur l'affichage des messages de l'abonné). Les messages ici prennent en charge plusieurs formats, puis cliquez sur le bouton Publier.

À propos de thinkphp utilisant mqtt

Enfin, revenez à l'option S'abonner pour vérifier si le message a été reçu avec succès. Comme le montre la figure, le message envoyé par l'éditeur (wo ai mqtt) a bien été reçu. été reçu avec succès.

À propos de thinkphp utilisant mqtt

Vous pouvez également choisir le décodeur de message correspondant (format texte, format JSON, encodage Base64, encodage hexadécimal, encodage Sparkplug)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer