anviz/php-mqtt-client

1.0.0 2020-07-10 09:33 UTC

This package is auto-updated.

Last update: 2024-09-10 19:26:40 UTC


README

Latest Stable Version Total Downloads License

php-mqtt/client 由Jacobs创建并维护。它允许您连接到MQTT代理,在那里您可以发布消息并订阅主题。该实现支持所有QoS级别(有局限性

安装

composer require anviz/mqttclient

此库需要PHP版本7.2或更高。

使用

发布

一个非常基础的发布示例只需要三个步骤:连接、发布和关闭

$clientId = 'test-publisher';

$mqtt = new MQTTClient($server, $port, $clientId);
$mqtt->connect();
$mqtt->publish('php-mqtt/client/test', 'Hello World!', 0);
$mqtt->close();

如果您不想传递一个 $clientId,系统将为您生成一个随机的。这基本上会隐式地强制进行干净会话。

请注意,大多数方法都可能抛出异常。上述示例没有添加任何异常处理以保持简洁。

订阅

订阅比发布更复杂,因为它需要运行事件循环

$clientId = 'test-subscriber';

$mqtt = new MQTTClient($server, $port, $clientId);
$mqtt->connect();
$mqtt->subscribe('php-mqtt/client/test', function ($topic, $message) {
    echo sprintf("Received message on topic [%s]: %s\n", $topic, $message);
}, 0);
$mqtt->loop(true);

在循环活动期间,您可以使用 $mqtt->interrupt() 向循环发送中断信号。这将终止循环在开始下一次迭代之前。例如,您可以使用 pcntl_signal(SIGINT, $handler) 调用此方法

pcntl_async_signals(true);

$clientId = 'test-subscriber';

$mqtt = new MQTTClient($server, $port, $clientId);
pcntl_signal(SIGINT, function (int $signal, $info) use ($mqtt) {
    $mqtt->interrupt();
});
$mqtt->connect();
$mqtt->subscribe('php-mqtt/client/test', function ($topic, $message) {
    echo sprintf("Received message on topic [%s]: %s\n", $topic, $message);
}, 0);
$mqtt->loop(true);
$mqtt->close();

功能

  • MQTT 版本
    • v3.1
    • v3.1.1
    • v5.0
  • 传输
    • TCP(未加密)
    • TLS(加密,使用证书授权文件验证对等方)
  • 连接
    • 最后意愿
    • 最后意愿主题
    • 最后意愿消息
    • 所需的QoS
    • 消息保留
    • 身份验证(用户名和密码)
    • 干净会话(可以设置和发送,但客户端对QoS 2消息没有持久性)
  • 发布
    • QoS 级别 0
    • QoS 级别 1(限制:没有跨会话的持久状态)
    • QoS 级别 2(限制:没有跨会话的持久状态)
  • 订阅
    • QoS 级别 0
    • QoS 级别 1
    • QoS 级别 2(限制:没有跨会话的持久状态)
  • 支持的消息长度:无限大 (没有强制限制,尽管MQTT协议仅支持高达256MB,但实际上不应该使用这一点)
  • 日志记录是可能的(可以将Psr\Log\LoggerInterface传递给客户端)
  • 持久化驱动程序
    • 内存驱动程序
    • Redis 驱动程序

限制

  • 无法保证消息标识符不会被重复使用(当第一次使用仍在等待时)。当前实现使用简单的计数器,该计数器在所有65535个标识符都使用后重置。这意味着只要客户端没有被使用到确认打开很长时间的程度,就应该没问题。这也仅影响QoS级别高于0的情况,因为QoS级别0是简单的发送和忘记模式。
  • 具有高于0的QoS级别的消息不会持久化,因为默认实现使用内存存储库来存储数据。为了避免损坏的消息流问题,使用干净会话标志来表示您不关心旧数据。

许可证

anviz/php-mqtt-client 是开源软件,根据MIT许可证授权。