https://github.com/mgdm/Mosquitto-PHP
Mosquitto-PHP是一个用于与MQTT(Message Queuing Telemetry Transport)协议交互的PHP扩展,它允许PHP应用程序通过MQTT与消息代理进行通信。以下是有关Mosquitto-PHP的一些关键信息:
1. Mosquitto-PHP扩展介绍:
- Mosquitto-PHP是一个PHP扩展,它提供了与Eclipse Mosquitto MQTT客户端库的集成,使PHP开发者能够轻松地编写MQTT客户端应用程序。
2. PHP 7支持:
- Mosquitto-PHP扩展已更新以支持PHP 7版本,这意味着它可以在PHP 7及更高版本上运行。这扩展的PHP 7支持得益于Sara Golemon的工作。
3. 扩展要求:
- PHP版本要求:Mosquitto-PHP扩展要求PHP 5.3及更高版本。
- libmosquitto版本要求:它需要使用libmosquitto库的1.2.x版本或更高版本。
- 支持的操作系统:通常在Linux和Mac OS X上工作,但未明确支持Windows。不过,欢迎开发人员提交Windows支持的贡献。
4. 安装Mosquitto-PHP:
- 您可以使用PECL来安装Mosquitto-PHP扩展。例如,使用以下命令来安装:
pecl install Mosquitto-alpha
或者,您也可以使用传统的扩展构建过程来手动构建和安装它:
phpize
./configure --with-mosquitto=/path/to/libmosquitto
make
make install
最后,将extension=mosquitto.so
添加到您的php.ini文件中以启用扩展。
5. 使用Mosquitto-PHP:
- Mosquitto-PHP允许您以异步方式与MQTT代理进行交互。您需要使用回调函数来处理连接、发布、订阅和消息接收等事件。
- 例如,以下是如何正确发布QoS为2的消息的示例:
use Mosquitto\Client;
$mid = 0;
$c = new Mosquitto\Client("PHP");
$c->onConnect(function() use ($c, &$mid) {
$mid = $c->publish("mgdm/test", "Hello", 2);
});
$c->onPublish(function($publishedId) use ($c, $mid) {
if ($publishedId == $mid) {
$c->disconnect();
}
});
$c->connect("localhost");
$c->loopForever();
- 您可以根据具体的MQTT应用程序要求,使用Mosquitto-PHP来创建定制的MQTT客户端。
总之,Mosquitto-PHP扩展使PHP开发者能够轻松地与MQTT代理进行通信,这对于构建物联网(IoT)应用程序和其他需要实时消息传递的应用程序非常有用。您可以使用它来连接、发布、订阅和处理MQTT消息。
event.php
<?php
$c = new Mosquitto\Client();
$c->onConnect(function($code, $message) {
echo "I'm connected\n";
});
$c->connect('localhost', 1883, 60);
$c->subscribe('#', 1);
$c->onMessage(function($m) {
var_dump($m);
});
$socket = $c->getSocket();
$base = new EventBase();
$ev = new Event($base, $socket, Event::READ | Event::PERSIST, 'cb', $base);
function cb($fd, $what, $arg) {
global $c;
echo "Triggered\n";
var_dump(func_get_args());
$c->loop();
}
$ev->add();
$base->dispatch();
这段 PHP 代码演示了如何使用 Mosquitto-PHP 扩展与 MQTT 服务器进行通信,并使用 libevent 库创建一个事件驱动的应用程序。以下是对代码的详细解释:
- 创建 Mosquitto 客户端对象:
$c = new Mosquitto\Client();
在这里,您创建了一个 Mosquitto 客户端对象 $c
。
- 设置连接回调函数:
$c->onConnect(function($code, $message) {
echo "I'm connected\n";
});
这个回调函数会在成功连接到 MQTT 服务器时执行,它简单地打印出 "I'm connected"。
- 连接到 MQTT 服务器:
$c->connect('localhost', 1883, 60);
这行代码连接到 MQTT 服务器,指定了服务器的主机名为 'localhost',端口号为 1883,超时时间为 60 秒。
- 订阅 MQTT 主题:
$c->subscribe('#', 1);
这里使用 subscribe
方法订阅了 MQTT 主题 '#',表示订阅所有主题。第二个参数 1 表示使用 QoS 1 等级。
- 设置接收消息的回调函数:
$c->onMessage(function($m) {
var_dump($m);
});
这个回调函数将在接收到 MQTT 消息时执行,它简单地使用 var_dump
打印消息内容。
- 获取 Mosquitto 客户端的套接字:
$socket = $c->getSocket();
这里通过 $c->getSocket()
获取 Mosquitto 客户端的套接字,以便后续在 libevent 中使用。
- 创建 libevent 基础对象和事件对象:
$base = new EventBase();
$ev = new Event($base, $socket, Event::READ | Event::PERSIST, 'cb', $base);
这里创建了 libevent 基础对象 $base
和事件对象 $ev
。事件对象监听 Mosquitto 客户端套接字的可读事件,并在事件触发时调用 'cb' 函数。
- 定义事件触发后的回调函数:
function cb($fd, $what, $arg) {
global $c;
echo "Triggered\n";
var_dump(func_get_args());
$c->loop();
}
这是事件触发后执行的回调函数 'cb'。它会在事件触发时打印 "Triggered" 和一些调试信息,然后调用 Mosquitto 客户端的 loop
方法来处理 MQTT 消息。
- 将事件对象添加到 libevent 循环:
$ev->add();
这行代码将事件对象 $ev
添加到 libevent 的事件循环中,以便监听 Mosquitto 客户端套接字的可读事件。
- 启动 libevent 事件循环:
$base->dispatch();
最后,这行代码启动 libevent 的事件循环,使其开始监听事件并执行回调函数。这将允许 Mosquitto 客户端接收和处理 MQTT 消息。
总之,这段代码创建了一个 Mosquitto 客户端,连接到 MQTT 服务器,订阅所有主题,并使用 libevent 库实现了一个事件驱动的应用程序,该应用程序能够异步接收和处理 MQTT 消息。当 Mosquitto 客户端接收到消息时,会触发 libevent 事件,然后执行回调函数来处理消息。
pub.php
<?php
$client = new Mosquitto\Client();
$client->onConnect('connect');
$client->onDisconnect('disconnect');
$client->onSubscribe('subscribe');
$client->onMessage('message');
$client->connect("localhost", 1883, 5);
$client->subscribe('/#', 1);
while (true) {
$client->loop();
$mid = $client->publish('/hello', "Hello from PHP at " . date('Y-m-d H:i:s'), 1, 0);
echo "Sent message ID: {$mid}\n";
$client->loop();
sleep(2);
}
$client->disconnect();
unset($client);
function connect($r) {
echo "I got code {$r}\n";
}
function subscribe() {
echo "Subscribed to a topic\n";
}
function message($message) {
printf("Got a message ID %d on topic %s with payload:\n%s\n\n", $message->mid, $message->topic, $message->payload);
}
function disconnect() {
echo "Disconnected cleanly\n";
}
这段 PHP 代码演示了如何使用 Mosquitto-PHP 扩展与 MQTT 服务器进行通信以及订阅和发布 MQTT 消息。以下是代码的详细解释:
- 创建 Mosquitto 客户端对象:
$client = new Mosquitto\Client();
在这里,您创建了一个 Mosquitto 客户端对象 $client
。
- 设置连接、订阅、消息和断开连接的回调函数:
$client->onConnect('connect');
$client->onDisconnect('disconnect');
$client->onSubscribe('subscribe');
$client->onMessage('message');
这些回调函数分别用于处理连接成功时的事件('connect')、断开连接时的事件('disconnect')、订阅主题时的事件('subscribe')、接收到消息时的事件('message')。
- 连接到 MQTT 服务器:
$client->connect("localhost", 1883, 5);
这行代码连接到 MQTT 服务器,指定了服务器的主机名为 'localhost',端口号为 1883,超时时间为 5 秒。
- 订阅 MQTT 主题:
$client->subscribe('/#', 1);
这里使用 subscribe
方法订阅了 MQTT 主题 '/#',表示订阅所有以 '/' 开头的主题。第二个参数 1 表示使用 QoS 1 等级。
- 进入循环并发送消息:
while (true) {
$client->loop();
$mid = $client->publish('/hello', "Hello from PHP at " . date('Y-m-d H:i:s'), 1, 0);
echo "Sent message ID: {$mid}\n";
$client->loop();
sleep(2);
}
这个 while
循环会持续运行,其中包含了 Mosquitto 客户端的 loop
方法,以便处理 MQTT 消息和事件。在循环中,它会使用 publish
方法发布一条带有时间戳的消息到主题 '/hello'。然后等待 2 秒继续下一轮循环。
- 断开连接和清理:
$client->disconnect();
unset($client);
最后,代码在循环结束后手动断开了与 MQTT 服务器的连接,并释放了 Mosquitto 客户端对象。
- 回调函数的定义:
function connect($r) {
echo "I got code {$r}\n";
}
function subscribe() {
echo "Subscribed to a topic\n";
}
function message($message) {
printf("Got a message ID %d on topic %s with payload:\n%s\n\n", $message->mid, $message->topic, $message->payload);
}
function disconnect() {
echo "Disconnected cleanly\n";
}
这些回调函数分别用于处理连接成功、订阅成功、接收到消息和断开连接的事件。在这些函数中,您可以自定义处理逻辑以响应不同事件。
总之,这段代码创建了一个 Mosquitto 客户端,连接到 MQTT 服务器,订阅主题,并周期性地发布消息。它还设置了回调函数来处理不同的事件,使您能够根据需要自定义处理逻辑。最后,代码手动断开了连接并清理资源。
subclass.php
<?php
class MyClient extends Mosquitto\Client {
protected $pendingSubs = [];
protected $grantedSubs = [];
protected $subscribeCallback = null;
public function __construct($id = null, $cleanSession = false) {
parent::__construct($id, $cleanSession);
parent::onSubscribe(array($this, 'subscribeHandler'));
}
public function subscribeHandler($mid, $qosCount, $grantedQos) {
if (!isset($this->pendingSubs[$mid])) {
return;
}
$topic = $this->pendingSubs[$mid];
$this->grantedSubs[$topic] = $grantedQos;
echo "Subscribed to topic {$topic} with message ID {$mid}\n";
if (is_callable($this->subscribeCallback)) {
$this->subscribeCallback($mid, $qosCount, $grantedQos);
}
}
public function subscribe($topic, $qos) {
$mid = parent::subscribe($topic, $qos);
$this->pendingSubs[$mid] = $topic;
}
public function onSubscribe(callable $callable) {
$this->subscribeCallback = $callable;
}
public function getSubscriptions() {
return $this->grantedSubs;
}
}
$c = new MyClient('subscriptionTest');
$c->onSubscribe(function() { echo "Hello, I got subscribed\n"; });
$c->connect('localhost', 1883, 50);
$c->subscribe('#', 1);
for ($i = 0; $i < 5; $i++) {
$c->loop(10);
}
var_dump($c->getSubscriptions());
这段 PHP 代码演示了如何创建一个自定义的 Mosquitto 客户端类 MyClient
,该类继承了 Mosquitto 客户端,并添加了一些自定义功能。以下是代码的详细解释:
- 创建自定义 Mosquitto 客户端类
MyClient
:
class MyClient extends Mosquitto\Client {
// ...
}
在这里,您创建了一个名为 MyClient
的类,它继承自 Mosquitto 客户端。
- 构造函数
__construct
:
public function __construct($id = null, $cleanSession = false) {
parent::__construct($id, $cleanSession);
parent::onSubscribe(array($this, 'subscribeHandler'));
}
在构造函数中,您首先调用了父类(Mosquitto 客户端)的构造函数,并注册了 subscribeHandler
方法作为订阅事件的回调函数。
- 订阅处理函数
subscribeHandler
:
public function subscribeHandler($mid, $qosCount, $grantedQos) {
// ...
}
这个方法会在成功订阅主题时被调用。它会处理订阅事件的回调,并将订阅的主题和相应的 QoS 存储到 grantedSubs
数组中。然后,它会触发 subscribeCallback
回调函数(如果已设置)。
- 订阅主题方法
subscribe
:
public function subscribe($topic, $qos) {
$mid = parent::subscribe($topic, $qos);
$this->pendingSubs[$mid] = $topic;
}
这个方法用于订阅主题,并将主题和消息 ID 存储到 pendingSubs
数组中。
- 设置订阅回调方法
onSubscribe
:
public function onSubscribe(callable $callable) {
$this->subscribeCallback = $callable;
}
这个方法允许您设置订阅事件的回调函数,以便在订阅时执行自定义逻辑。
- 获取订阅信息方法
getSubscriptions
:
public function getSubscriptions() {
return $this->grantedSubs;
}
这个方法用于获取已订阅的主题及其对应的 QoS。
- 创建
MyClient
对象,设置回调和执行订阅:
$c = new MyClient('subscriptionTest');
$c->onSubscribe(function() { echo "Hello, I got subscribed\n"; });
$c->connect('localhost', 1883, 50);
$c->subscribe('#', 1);
在这里,您创建了一个 MyClient
对象,并设置了订阅回调函数。然后,连接到 MQTT 服务器,订阅了以 '#' 开头的所有主题。
- 使用
loop
方法运行客户端循环:
for ($i = 0; $i < 5; $i++) {
$c->loop(10);
}
这个循环允许客户端运行,并处理 MQTT 消息和事件。loop(10)
意味着每次循环会等待 10 毫秒来处理事件。
- 获取订阅信息并输出:
var_dump($c->getSubscriptions());
最后,您使用 getSubscriptions
方法获取已订阅的主题信息,并将其输出。
总之,这段代码演示了如何创建自定义的 Mosquitto 客户端类,以处理 MQTT 订阅事件,并提供了一些自定义功能,例如获取已订阅的主题信息和设置订阅回调函数。这使您能够更灵活地与 MQTT 服务器进行通信和处理订阅。
test.php
<?php
$client = new Mosquitto\Client();
$client->onConnect('connect');
$client->onDisconnect('disconnect');
$client->onSubscribe('subscribe');
$client->onMessage('message');
$client->connect("localhost", 1883, 5);
$client->onLog('logger');
$client->subscribe('#', 1);
for ($i = 0; $i < 10; $i++) {
$client->loop();
}
$client->unsubscribe('#');
for ($i = 0; $i < 10; $i++) {
$client->loop();
}
function connect($r, $message) {
echo "I got code {$r} and message {$message}\n";
}
function subscribe() {
echo "Subscribed to a topic\n";
}
function unsubscribe() {
echo "Unsubscribed from a topic\n";
}
function message($message) {
printf("Got a message on topic %s with payload:\n%s\n", $message->topic, $message->payload);
}
function disconnect() {
echo "Disconnected cleanly\n";
}
function logger() {
var_dump(func_get_args());
}
这段 PHP 代码演示了如何使用 Mosquitto 客户端库与 MQTT 代理(通常在 localhost 上运行)进行通信,并定义了一些回调函数来处理不同的 MQTT 事件。以下是这段代码的详细解释:
1. 创建 Mosquitto 客户端对象:
$client = new Mosquitto\Client();
这行代码创建了一个 Mosquitto 客户端对象,用于连接到 MQTT 代理并执行 MQTT 操作。
2. 设置回调函数:
$client->onConnect('connect');
$client->onDisconnect('disconnect');
$client->onSubscribe('subscribe');
$client->onMessage('message');
$client->onLog('logger');
这些行设置了不同事件的回调函数。当客户端连接成功时,onConnect
回调函数将被调用,当客户端断开连接时,onDisconnect
回调函数将被调用,以此类推。这些回调函数会在后面的代码中定义。
3. 连接到 MQTT 代理:
$client->connect("localhost", 1883, 5);
这行代码连接到本地 MQTT 代理,通常运行在 localhost
主机的 1883
端口上。连接的超时时间设置为 5
秒。
4. 订阅 MQTT 主题:
$client->subscribe('#', 1);
这行代码订阅了名为 #
的 MQTT 主题,这个特殊的主题表示订阅所有主题。订阅的 QoS(服务质量)级别设置为 1
。
5. 运行 MQTT 客户端循环:
for ($i = 0; $i < 10; $i++) {
$client->loop();
}
这个循环运行 MQTT 客户端,允许它接收和处理来自 MQTT 代理的消息以及触发不同事件的回调函数。
6. 取消订阅 MQTT 主题:
$client->unsubscribe('#');
这行代码取消订阅之前订阅的 #
主题,即停止接收与该主题相关的消息。
7. 再次运行 MQTT 客户端循环:
for ($i = 0; $i < 10; $i++) {
$client->loop();
}
这段代码再次运行 MQTT 客户端循环,确保处理所有取消订阅后的事件。
8. 定义各种事件回调函数:
下面是定义的不同事件的回调函数:
connect($r, $message)
:当客户端成功连接到 MQTT 代理时,此回调被调用,显示连接结果代码$r
和消息$message
。subscribe()
:当客户端成功订阅主题时,此回调被调用,显示 "Subscribed to a topic"。unsubscribe()
:当客户端成功取消订阅主题时,此回调被调用,显示 "Unsubscribed from a topic"。message($message)
:当客户端接收到新消息时,此回调被调用,显示消息的主题和有效载荷。disconnect()
:当客户端与 MQTT 代理断开连接时,此回调被调用,显示 "Disconnected cleanly"。logger()
:此回调用于记录日志信息,它将输出回调函数的所有参数。
总之,这段代码创建了一个 MQTT 客户端并设置了回调函数,然后连接到 MQTT 代理,订阅主题,运行客户端循环以接收消息和处理事件,并在不同的事件发生时触发相应的回调函数,从而实现了 MQTT 通信。这对于与 MQTT 代理进行互动和处理消息非常有用。
testOnpublish.php
<?php
class MQ {
public static $publish = array();
public static $receive = array();
public static function addPublish($mid, $msg) {
$msg->id = $mid;
self::$publish[$mid] = $msg;
}
public static function confirm($mid) {
if(array_key_exists($mid, self::$publish)) {
self::$publish[$mid]->state = true;
}
}
public static function addReceive($msg) {
$msg = Message::factory($msg, true);
self::$receive[$msg->id] = $msg;
}
}
class Message {
public $id;
public $state = false;
public $msg;
public static function factory(Mosquitto\Message $msg, $state = false) {
$message = new Message();
$message->state = $state;
$message->msg = $msg;
$message->id = $msg->mid;
return $message;
}
}
$client = new Mosquitto\Client('client.terminal.onpublish', false);
$client->onMessage(function($msg) {
print_r(array('receive', $msg));
MQ::addReceive($msg);
});
$client->onPublish(function($mid) {
MQ::confirm($mid);
print_r(array('comfirm publish', MQ::$publish[$mid]));
});
$client->onConnect(function($rc, $msg) {
print_r(array('rc' => $rc, 'message' => $msg));
});
$client->connect('localhost', 1883, 60);
sleep(1);
$client->subscribe('/test/publish', 1);
$msg = Message::factory(new Mosquitto\Message());
$msg->msg->topic = '/test/publish';
$msg->msg->payload = 'hello from on publish';
$msg->msg->qos = 1;
$mid = $client->publish($msg->msg->topic, $msg->msg->payload, $msg->msg->qos);
print_r(array('publish', $msg));
MQ::addPublish($mid, $msg);
sleep(1);
$client->loopForever();
这段PHP代码演示了如何使用Mosquitto客户端库创建一个MQTT客户端,该客户端具有自定义的消息确认和处理机制。以下是代码的详细解释:
1. 创建MQ类:
class MQ {
public static $publish = array();
public static $receive = array();
public static function addPublish($mid, $msg) {
$msg->id = $mid;
self::$publish[$mid] = $msg;
}
public static function confirm($mid) {
if(array_key_exists($mid, self::$publish)) {
self::$publish[$mid]->state = true;
}
}
public static function addReceive($msg) {
$msg = Message::factory($msg, true);
self::$receive[$msg->id] = $msg;
}
}
这个类用于管理发布和接收的消息。它包括以下方法:
addPublish($mid, $msg)
:将发布的消息添加到$publish
数组中,以便稍后进行确认。confirm($mid)
:确认已发布的消息,将其状态标记为已确认。addReceive($msg)
:将接收的消息添加到$receive
数组中。
2. 创建消息类Message:
class Message {
public $id;
public $state = false;
public $msg;
public static function factory(Mosquitto\Message $msg, $state = false) {
$message = new Message();
$message->state = $state;
$message->msg = $msg;
$message->id = $msg->mid;
return $message;
}
}
这个类表示MQTT消息。它包括以下属性:
$id
:消息ID。$state
:消息状态,用于确认是否已接收。$msg
:实际的Mosquitto消息对象。
还包括一个工厂方法factory
,用于从Mosquitto消息创建Message对象。
3. 创建Mosquitto客户端对象:
$client = new Mosquitto\Client('client.terminal.onpublish', false);
这行代码创建了一个Mosquitto客户端对象,并为其指定了客户端ID和cleanSession标志。
4. 设置回调函数:
$client->onMessage(function($msg) {
print_r(array('receive', $msg));
MQ::addReceive($msg);
});
$client->onPublish(function($mid) {
MQ::confirm($mid);
print_r(array('comfirm publish', MQ::$publish[$mid]));
});
$client->onConnect(function($rc, $msg) {
print_r(array('rc' => $rc, 'message' => $msg));
});
这些回调函数用于处理不同的MQTT事件:
onMessage
:处理接收到的消息,将消息添加到MQ::$receive
数组中。onPublish
:处理已发布的消息的确认,将消息标记为已确认。onConnect
:处理连接事件,打印连接结果。
5. 连接到MQTT代理:
$client->connect('localhost', 1883, 60);
这行代码连接到本地MQTT代理,通常运行在localhost
上的1883
端口上。连接的超时时间设置为60
秒。
6. 发布消息和处理:
sleep(1);
$client->subscribe('/test/publish', 1);
$msg = Message::factory(new Mosquitto\Message());
$msg->msg->topic = '/test/publish';
$msg->msg->payload = 'hello from on publish';
$msg->msg->qos = 1;
$mid = $client->publish($msg->msg->topic, $msg->msg->payload, $msg->msg->qos);
print_r(array('publish', $msg));
MQ::addPublish($mid, $msg);
sleep(1);
$client->loopForever();
这段代码的主要功能是:
- 订阅主题
/test/publish
。 - 创建一个要发布的消息对象
$msg
。 - 发布消息,并将消息添加到
MQ::$publish
数组中以进行后续确认。 - 使用
loopForever
方法持续运行MQTT客户端以处理消息和事件。
总之,这段代码创建了一个具有自定义消息确认和处理机制的MQTT客户端,它可以发布和接收消息,并在处理时跟踪消息的状态。这对于实现更高级的MQTT消息管理非常有用。
testwill.php
<?php
$client = new Mosquitto\Client();
$client->onConnect('connect');
$client->onDisconnect('disconnect');
$client->onSubscribe('subscribe');
$client->onMessage('message');
$client->setWill('/hello', "Client died :-(", 1, 0);
$client->connect("localhost", 1883, 5);
$client->subscribe('/#', 1);
$client->loopForever();
function connect($r) {
echo "I got code {$r}\n";
}
function subscribe() {
echo "Subscribed to a topic\n";
}
function message($message) {
printf("Got a message on topic %s with payload:\n%s\n", $message->topic, $message->payload);
}
function disconnect() {
echo "Disconnected cleanly\n";
}
这段PHP代码演示了如何创建一个Mosquitto MQTT客户端,该客户端具有以下功能:
1. 创建Mosquitto客户端对象:
$client = new Mosquitto\Client();
这行代码创建了一个Mosquitto客户端对象。
2. 设置连接和事件回调:
$client->onConnect('connect');
$client->onDisconnect('disconnect');
$client->onSubscribe('subscribe');
$client->onMessage('message');
这些行代码设置了不同MQTT事件的回调函数,当客户端连接、断开连接、订阅主题或接收消息时,将调用相应的回调函数。
3. 设置遗嘱消息(Will Message):
$client->setWill('/hello', "Client died :-(", 1, 0);
这行代码设置了遗嘱消息,当客户端意外断开连接时,将自动发布遗嘱消息到主题/hello
,消息内容是"Client died :-(",QoS级别为1,保留标志为0。
4. 连接到MQTT代理:
$client->connect("localhost", 1883, 5);
这行代码连接到MQTT代理,该代理通常运行在本地主机(localhost)的1883端口上。连接超时设置为5秒。
5. 订阅主题:
$client->subscribe('/#', 1);
这行代码订阅了以/#
开头的所有主题,并将QoS级别设置为1。
6. 使用loopForever
方法持续运行客户端:
$client->loopForever();
这行代码使客户端进入无限循环,以便处理MQTT消息和事件。客户端将保持连接状态,并在收到消息时调用相应的消息回调函数。
7. 定义连接、订阅、消息和断开连接的回调函数:
这些回调函数用于处理不同的MQTT事件:
connect($r)
:处理连接事件,其中$r
参数包含连接的返回码。subscribe()
:处理订阅事件,表示成功订阅主题。message($message)
:处理接收到的消息,打印主题和消息内容。disconnect()
:处理断开连接事件,表示客户端已经断开连接。
总之,这段代码创建了一个Mosquitto MQTT客户端,连接到MQTT代理,订阅了一组主题,并设置了各种事件的回调函数。它还配置了遗嘱消息,以便在客户端意外断开连接时发送通知。最后,客户端使用loopForever
方法持续运行,以便处理MQTT消息和事件。