ifornew / laravel-mqtt
Laravel 对 php-mqtt/client 库的包装。
Requires
- php: ^7.1|^7.2|^7.3|^7.4|^8.0
- illuminate/config: ~5.0|~7.0|~8.0|~9.0
- illuminate/support: ~5.0|~7.0|~8.0|~9.0
- php-mqtt/client: ^1.0
Requires (Dev)
This package is not auto-updated.
Last update: 2024-09-28 06:13:07 UTC
README
php-mqtt/laravel-client 由 Marvin Mall 创建并维护。它是 php-mqtt/client 包的 Laravel 包装器,允许您连接到 MQTT 代理,在那里您可以发布消息并订阅主题。
安装
该软件包可在 packagist.org 上找到,并可以使用 composer 安装。
composer require ifornew/laravel-mqtt
该软件包将通过 Laravel 自动发现包的方式注册自己。注册将包括服务提供者以及 MQTT 外观。
安装软件包后,您应使用以下命令发布配置文件
php artisan vendor:publish --provider="Ifornew\Mqtt\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许可证。