thinkphp链接mqtt服务器,然后在订阅下发布消息

cmd打开项目根目录,安装插件,执行下面的命令

javascript 复制代码
composer require php-mqtt/client

执行完成之后会在vendor 目录下有php-mqtt 文件

然后在你的 extend文件下 新建mqtt文件 在文件中新建 Mqtt.php 下面是代码

php 复制代码
<?php
/*
 * @S: ========================================================
 * @Name: 控制器: 
 * @Author: Fu
 * @Date: 2022-03-25 14:20:58
 * @FilePath: /hezonyuyin/extend/mqtt/Mqtt.php
 * @E: ========================================================
 */
namespace mqtt;

use PhpMqtt\Client\MQTTClient;
class Mqtt
{
    private $server;
    private $port;
    private $clientId;
    private $username;
    private $password;
    private $clean_session;
    public function __construct($server = '', $port = '', $clientId = '', $username = '', $password = '', $clean_session = '')
    {
        $this->server =  '127.0.0.1';//这里是你的服务器地址
        $this->port =  1883;
        $this->clientId =  'php-'.uniqid();
        $this->username =  'emqx_user';
        $this->password =  NULL;
        $this->clean_session  =  FALSE;
    }

    /**
     * @S: -------------------------------
     * @Name: 方法: 连接MQTT
     * @Author: Fcy
     * @param {*}
     * @return {*}
     * @Date: 2022-03-31 09:26:12
     * @E: -------------------------------
     */    
    public function mqtt()
    {
        $mqtt = new MqttClient($this->server, $this->port, $this->clientId);
        $mqtt->connect($this->username, $this->password);
        $mqtt->loop(true);
    }

    /**
     * @S: ------------------------------
     * @Name: 方法: 发布订阅
     * @Author: Fcy
     * @param {*}
     * @return {*}
     * @Date: 2022-03-25 14:22:42
     * @E: -------------------------------
     */    
    public function publish($topic,$content)
    {
        $mqtt = new MqttClient($this->server, $this->port, $this->clientId);
        $mqtt->connect($this->username, $this->password);
        $mqtt->publish($topic,$content,0,true);
    }
    
}

在项目的控制器的方法里,实现发布消息,方法如下

php 复制代码
<?php
namespace app\facemqtt\controller;

use think\Controller;
//引入extend文件夹里的类
use mqtt\Mqtt;
class Index extends Controller
{
    public function indexpage(){
        $this->push('topic');
        return 123;
    }
    private function push($topic, $data = [])
    {
        $mqtt = new Mqtt();
        $content = json_encode([
            'type' => 123,
            'time' => time(),
            'msg'  => '你好!',
        ]);
        //发布订阅消息,$topic 是主题,$content是发布的消息
        //然后订阅的这个主题的程序,就会收到$content消息
        $mqtt->publish($topic, $content);
    }
}
相关推荐
zmsup1 小时前
Agent 上下文调优:结合 OpsArk 运维智能体,设计模型每一步真正需要的信息
运维·agent·上下文压缩·运维智能体·上下文调优
吴声子夜歌3 小时前
Nginx应用与运维——Nginx负载均衡应用实战(二)
运维·nginx·负载均衡
lisanmengmeng4 小时前
NRPE 添加命令(一)
linux·运维·服务器
pt10434 小时前
CML网络仿真入门-2:使用CML模拟网络实验环境
运维·网络协议
五彩小白4 小时前
自回归和上下文
android
树下水月4 小时前
Typora破解
linux·服务器·前端
沫璃染墨5 小时前
《从零入门Linux系统篇(五十七):线程篇·十——生产者消费者模型进阶:从环形缓冲区到POSIX信号量》
linux·运维·服务器·开发语言·c++·系统架构·信号处理
HAHAXX85 小时前
电商RPA批量上架通用方案:一套流程如何同时跑通拼多多、抖店、淘宝和跨境平台
java·运维·rpa
零基础1236 小时前
LLM Agent 驱动的物模型构建:从设备手册到边缘接入的自动化实践
运维·人工智能·经验分享·python·自动化
星夜夏空996 小时前
网络编程(5)—— Reactor实现(v3)
服务器·网络·php