basttyy / laravel-mqtt-client
为 Laravel 的 basttyy/php-mqtt 库提供的包装器。
Requires
- php: ^7.4|^8.0
- basttyy/php-mqtt: ^1.0
- illuminate/config: ~7.0|~8.0|~9.0
- illuminate/support: ~7.0|~8.0|~9.0
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-23 19:53:12 UTC
README
php-mqtt/laravel-client
由 Marvin Mall 创建并维护。它是 php-mqtt/client
包的 Laravel 包装器,允许您连接到 MQTT 代理,在那里您可以发布消息并订阅主题。
安装
该包可在 packagist.org 上找到,并可以使用 composer 安装
composer require php-mqtt/laravel-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 正常工作。这是因为使用一次性命令,我们无法保证消息到达目标。事件循环将确保如果代理在宽限期内在没有收到确认的情况下,发布的消息会再次发送。只有当代理返回确认(或 QoS 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许可证授权。