try-to/swoole_mqtt

swoole mqtt 客户端

v0.0.5 2018-12-14 06:41 UTC

This package is auto-updated.

Last update: 2024-09-09 15:41:45 UTC


README

基于 swoole 的 PHP 异步 MQTT 客户端。

安装

composer require try-to/swoole_mqtt

文档

中文文档

示例

subscribe.php

<?php
use TrytoMqtt\Client;
require_once __DIR__ . '/vendor/autoload.php';
$options = [
    'clean_session' => false,
    'client_id' => 'demo-subscribe-123456',
    'username' => '',
    'password' => '',
];
$mqtt = new Client('127.0.0.1', 1883, $options);
$mqtt->onConnect = function ($mqtt) {
    $mqtt->subscribe('/World');
};
$mqtt->onMessage = function ($topic, $content) {
    var_dump($topic, $content);
};
$mqtt->onError = function ($exception) use ($mqtt) {
    echo "error\n";
    // $mqtt->reconnect(1000);
};
$mqtt->onClose = function () {
    echo "close\n";
};
$mqtt->connect();

使用命令 php subscribe.php 运行

publish.php

<?php
use TrytoMqtt\Client;
require_once __DIR__ . '/../vendor/autoload.php';
$options = [
    'clean_session' => false,
    'client_id' => 'demo-publish-123456',
    'username' => '',
    'password' => '',
];
$mqtt = new Client('127.0.0.1', 1883, $options);
$mqtt->onConnect = function ($mqtt) {
    $mqtt->publish('/World', 'hello swoole mqtt');
};
$mqtt->onError = function ($exception) {
    echo "error\n";
};
$mqtt->onClose = function () {
    echo "close\n";
};
$mqtt->connect();

使用命令 php publish.php 运行

API

  • Client::__construct()
  • Client::connect()
  • Client::reconnect()
  • Client::publish()
  • Client::subscribe()
  • Client::unsubscribe()
  • Client::disconnect()
  • Client::close()
  • 连接回调 onConnect
  • 消息回调 onMessage
  • 错误回调 onError
  • 关闭回调 onClose

__construct (string $host, int $port, [array $options])

  • $host 服务地址。

  • $port 端口。

  • $options 是客户端连接选项。默认值

    • keepalive: 50 秒,设置为 0 以禁用
    • client_id: 客户端 ID,默认 swoole-mqtt-client-{$mt_rand}
    • protocol_name: 'MQTT' 或 'MQIsdp'
    • protocol_level: 'MQTT'4 和 'MQIsdp' 是 3
    • clean_session: true,设置为 false 以在离线时接收 QoS 1 和 2 消息
    • reconnect_period: 1 秒,两次重连之间的间隔
    • connect_timeout: 30 秒,等待 CONNACK 的超时时间
    • username: 您的代理器所需的用户名(如有)
    • password: 您的代理器所需的密码(如有)
    • will: 当客户端断开连接时,代理器将自动发送的消息。格式为
      • topic: 要发布的主题
      • content: 要发布的消息
      • qos: QoS
      • retain: 保留标志
    • resubscribe : 如果连接中断并且重新连接,则自动重新订阅已订阅的主题(默认 true
    • bindto 默认 '', 用于指定 PHP 将使用的网络访问 IP 地址
    • ssl 默认 false,可以设置为 truessl context,请参阅 https://php.ac.cn/manual/en/context.ssl.php
    • debug 默认 false,设置为 true 以显示调试信息

connect()

连接服务 __construct($host, $port, $options)

reconnect()

重新连接服务 __construct($host, $port, $options)

publish(String $topic, String $content, [array $options], [callable $callback])

将消息发布到主题

  • $topic 是要发布的主题,String
  • $message 是要发布的消息,String
  • $options 是发布选项,包括
    • qos QoS 级别,Number,默认 0
    • retain 保留标志,Boolean,默认 false
    • dup 标记为重复标志,Boolean,默认 false
  • $callback - function (\Exception $exception),当 QoS 处理完成时触发,或在 QoS 0 的情况下在下一个 tick 时触发。如果没有错误发生,则 $exception 将为 null。

subscribe(mixed $topic, [array $options], [callable $callback])

订阅主题或主题

  • $topic 是一个 String 主题或一个具有键为主题名称和值为 QoS 的 Array(如 array('test1'=> 0, 'test2'=> 1) 以订阅)。
  • $options 是订阅选项,包括
    • qos qos 订阅级别,默认 0
  • $callback - function (\Exception $exception, array $granted) 在子确认(suback)事件中触发的回调函数,其中
    • exception 是订阅错误或客户端断开连接时发生的错误
    • granted 是一个数组,例如 array('topic' => 'qos', 'topic' => 'qos'),其中
      • topic 是已订阅的主题
      • qos 是该主题的授予服务质量等级

unsubscribe(mixed $topic, [callable $callback])

从主题或主题列表中取消订阅

  • $topic 是要取消订阅的字符串主题或主题数组
  • $callback - function (\Exception $e),在取消确认(unsuback)事件中触发。如果没有错误发生,则 $exception 将为 null。

disconnect()

向代理发送 DISCONNECT 数据包并关闭客户端。

close()

不发送 DISCONNECT 数据包就关闭客户端。

回调函数 onConnect(Client $mqtt)

在成功连接(接收到 CONNACK 数据包)时发出。

回调函数 onMessage(String $topic, String $content, Client $mqtt)

function (topic, message, packet) {}

当客户端接收到发布(publish)数据包时发出。

  • $topic 接收到的数据包的主题
  • $content 接收到的数据包的有效载荷
  • $mqtt 客户端实例。

回调函数 onError(\Exception $exception)

当发生错误时发出,例如客户端无法连接到代理。

回调函数 onClose()

在连接关闭时发出。

材料

https://github.com/walkor/mqtt