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