ykxiao/laravel-mqtt-client

ykxiao/laravel-mqtt-client 库的 Laravel 封装。

v1.3.2 2023-07-06 06:33 UTC

This package is not auto-updated.

Last update: 2024-09-27 07:29:19 UTC


README

Latest Stable Version Total Downloads Tests Quality Gate Status Maintainability Rating Reliability Rating Security Rating Vulnerabilities License

php-mqtt/laravel-clientMarvin Mall 创建并维护。它是 php-mqtt/client 包的 Laravel 封装,允许您连接到 MQTT 代理,在那里您可以发布消息并订阅主题。

安装

该包可在 packagist.org 上找到,并可以使用 composer 安装。

composer require ykxiao/laravel-mqtt-client

该包将通过 Laravel 自动发现包的方式注册自身。注册的将包括服务提供者以及一个 MQTT 门面。

安装包后,您应使用以下命令发布配置文件:

php artisan vendor:publish --provider="PhpMqtt\Client\MqttClientServiceProvider" --tag="config"

并根据您的需要更改 config/mqtt-client.php 中的配置。

配置

该包允许您配置多个命名连接。一个包含内联文档的初始示例可以在发布的配置文件中找到。大多数配置选项都是可选的,并带有合理的默认值(特别是所有的 connection_settings)。

以下是一个包含两个连接的示例配置,其中一个用于共享公共数据,另一个用于私有数据:

'default_connection' => 'private',

'connections' => [
    'private' => [
        'host' => 'mqtt.example.com',
        'port' => 1883,
    ],
    'public' => [
        'host' => 'test.mosquitto.org',
        'port' => 1883,
    ],
],

在此示例中,私有连接是默认连接。

注意:建议使用环境变量来配置 MQTT 客户端。配置文件中可以找到可用的环境变量。

使用

发布(QoS 级别 0)

使用 QoS 级别 0 发布消息非常简单,只需一条命令即可完成。

use PhpMqtt\Client\Facades\MQTT;

MQTT::publish('some/topic', 'Hello World!');

如果需要,可以将 retain 标志(默认:false)作为第三个参数传递,并将连接名称作为第四个参数。

use PhpMqtt\Client\Facades\MQTT;

MQTT::publish('some/topic', 'Hello World!', true, 'public');

使用 MQTT::publish($topic, $message) 将隐式调用 MQTT::connection(),但在使用后不会关闭连接。如果因为您的脚本不再需要连接,您想手动关闭连接,可以调用 MQTT:disconnect()(可选地带有连接名称作为参数)。请注意,使用 MQTT::publish($topic, $message) 将始终使用 QoS 级别 0。如果您需要不同的 QoS 级别,您需要直接使用 MqttClient,这将在下面解释。

发布(QoS 级别 1 & 2)

与 QoS 级别 0 不同,我们需要运行一个事件循环才能使 QoS 1 和 2 正常工作。这是因为通过一次性命令,我们无法保证消息能够到达目标。事件循环将确保在代理没有在宽限期内返回确认的情况下,重新发送已发布的消息。

use PhpMqtt\Client\Facades\MQTT;

/** @var \PhpMqtt\Client\Contracts\MqttClient $mqtt */
$mqtt = MQTT::connection();
$mqtt->publish('some/topic', 'foo', 1);
$mqtt->publish('some/other/topic', 'bar', 2, true); // Retain the message
$mqtt->loop(true);

$mqtt->loop() 实际上启动了一个无限循环。要退出循环,有多种选择。在简单发布消息的情况下,我们只想收到一个确认。因此,我们可以简单地将 true 作为第二个参数传递,以在所有重发队列清除后退出循环。

/** @var \PhpMqtt\Client\Contracts\MqttClient $mqtt */
$mqtt->loop(true, true);

要退出循环,还可以调用 $mqtt->interrupt(),这将在下一次迭代期间退出循环。此方法可以例如在注册的信号处理程序中调用。

/** @var \PhpMqtt\Client\Contracts\MqttClient $mqtt */
pcntl_signal(SIGINT, function () use ($mqtt) {
    $mqtt->interrupt();
});

订阅

与使用 QoS 级别 1 和 2 进行发布类似,订阅需要运行一个事件循环。尽管在运行循环之前,需要订阅主题。

use PhpMqtt\Client\Facades\MQTT;

/** @var \PhpMqtt\Client\Contracts\MqttClient $mqtt */
$mqtt = MQTT::connection();
$mqtt->subscribe('some/topic', function (string $topic, string $message) {
    echo sprintf('Received QoS level 1 message on topic [%s]: %s', $topic, $message);
}, 1);
$mqtt->loop(true);

功能

这个库允许您使用由 php-mqtt/client 提供的所有功能。只需使用 MQTT::connection(string $name = null) 获取 \PhpMqtt\Client\Contracts\MqttClient 的实例,然后直接使用它。

要查看大量示例,这些示例解释了如何使用 MQTT 客户端(直接使用),您可以访问 php-mqtt/client-examples 仓库

许可证

php-mqtt/laravel-client 是开源软件,在 MIT 许可证 下授权。