php版MQTT协议发布主题模块

昨天晚上写了一篇关于MQTT的笔记《Workerman MQTT协议通信指北》,通过上一篇笔记我们可以很直观的了解到PHP采用MQTT通讯时不只是安装workerman那么简单。还需要配置一个mqtt broker。

目前MQTT broker方面最老的是mosquitto,比较新的是emqx。安装方法很多,波波就不再说了,而且也很简单。

今天主要针对消息推送来进行分享和记录。

由于消息订阅可以实时获取MQTT broker中的信息,因此我们需要把订阅功能单独写出来,运行在CLI模式下。当然为了回复消息,订阅中也需要发布消息。与此同时,其他页面中的业务逻辑遇到需要推送的消息时怎么办?

为了解决mqtt消息的独立发布,我们需要将该功能独立出一个模块,在需要发布消息的业务单元中引入即可。

以ThinkPHP为例,我写了一个Model代码仅供参考。

1、引入类库phpMQTT

  1. composer require Bluerhinos\phpMQTT

2、Mqtt.php

  1. <?php
  2. namespace app\pigeon\model;
  3. use Bluerhinos\phpMQTT;
  4. use think\Model;
  5. /**
  6.  *
  7.  * Class Mqtt.php
  8.  * @package app\admin\controller
  9.  * @author 繁华如梦 <[email protected]>
  10.  * @desc:Mqtt通讯模型
  11.  * @date 2021/3/15 16:19
  12.  */
  13. class Mqtt extends Model{
  14.     /** MQTT 发送消息(发布)
  15.      * @param string $topic  主题
  16.      * @param object $content  消息
  17.      * @param integer $qos  消息质量
  18.      * @param bool $retain 离线发送
  19.      */
  20.     public function sender($topic,$content,$qos=0,$retain=false){
  21.         require_once (VENDOR_PATH.'bluerhinos'.DS.'phpmqtt'.DS.'phpMQTT.php');
  22.         $host = "127.0.0.1";
  23.         $port = 1883;
  24.         $username = "";
  25.         $password = "";
  26.         $mqtt = new phpMQTT($host,$port,"Server".rand(10000,99999));
  27.         if($mqtt->connect(true,null,$username,$password)){
  28.             //连接成功,发送消息
  29.             $mqtt->publish($topic,$content,$qos,$retain);
  30.             $mqtt->close();
  31.             $data = ['code'=>200,'msg'=>"发送成功"];
  32.         }else{
  33.             $data = ['code'=>500,'msg'=>"服务器连接错误"];
  34.         }
  35.         return $data;
  36.     }
  37. }

用户名和密码是连接broker时需要认证的。代码写入model后,可以在任意控制器中随意调用。也就实现了消息的自由发布。

以上代码我们同样可以用Workerman实现一遍,不同之处在于workerman的client创建方式。

你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!