以下は、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.'/phpMQTT-master/phpMQTT.php'); $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.'/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->connect(true, NULL, $username, $password)) { exit('error'); //连接失败 } 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); } }
を使用してソフトウェアを開きます。インターフェイスは次のとおりです
以上がmqtt を使用した thinkphp についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。