anviz / php-mqtt-client
Anviz MQTT 客户端
1.0.0
2020-07-10 09:33 UTC
Requires
- php: ^7.2
- psr/log: ^1.1
Requires (Dev)
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-09-10 19:26:40 UTC
README
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许可证授权。