🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Client API ## __construct() 创建一个MQTT客户端实例 ```php Simps\MQTT\Client::__construct(string $host, int $port, ClientConfig $config, int $clientType = Client::COROUTINE_CLIENT_TYPE) ``` * 参数`string $host` Broker 的 IP 地址 * 参数`int $port` Broker 的端口 * 参数`ClientConfig $config` 客户端配置对象。 示例: ```php $config = [ 'userName' => '', // 用户名 'password' => '', // 密码 'clientId' => '', // 客户端id 'keepAlive' => 10, // 默认0秒,设置成0代表禁用 'protocolName' => 'MQTT', // 协议名,默认为MQTT(3.1.1版本),也可为MQIsdp(3.1版本) 'protocolLevel' => 4, // 协议等级,MQTT3.1.1版本为4,5.0版本为5,MQIsdp为3 'properties' => [], // MQTT5 中所需要的属性 'delay' => 3000, // 重连时的延迟时间 (毫秒) 'maxAttempts' => 5, // 最大重连次数。默认-1,表示不限制 'swooleConfig' => [] ]; $configObj = new Simps\MQTT\Config\ClientConfig($config); $client = new Simps\MQTT\Client('127.0.0.1', 1883, $configObj); ``` !> Client 会根据设置的`protocol_level`来使用对应的协议解析 * 参数`int $clientType` 设置客户端类型,使用协程 Client 还是同步阻塞 Client。默认为协程 Client。 同步阻塞 Client 适用于 Fpm|Apache 环境,主要用于`publish`消息,设置为`Client::SYNC_CLIENT_TYPE`。 ## connect() 连接Broker ```php Simps\MQTT\Client->connect(bool $clean = true, array $will = []) ``` * 参数`bool $clean` 清理会话,默认为`true` 具体描述请查看对应协议文档:`清理会话 Clean Session` * 参数`array $will` 遗嘱消息,当客户端断线后Broker会自动发送遗嘱消息给其它客户端 需要设置的内容如下 ```php $will = [ 'topic' => '', // 主题 'qos' => 1, // QoS等级 'retain' => 0, // retain标记 'message' => '', // 遗嘱消息内容 'properties' => [], // MQTT5 中需要,可选 ]; ``` ## publish() 向某个主题发布一条消息 ```php Simps\MQTT\Client->publish($topic, $message, $qos = 0, $dup = 0, $retain = 0, array $properties = []) ``` * 参数`$topic` 主题 * 参数`$message` 内容 * 参数`$qos` QoS等级,默认0 * 参数`$dup` 重发标志,默认0 * 参数`$retain` retain标记,默认0 * 参数`$properties` 属性,MQTT5 中需要,可选 ## subscribe() 订阅一个主题或者多个主题 ```php Simps\MQTT\Client->subscribe(array $topics, array $properties = []) ``` * 参数`array $topics` `$topics`的`key`是主题,值为`QoS`的数组,例如 ```php // MQTT 3.x $topics = [ // 主题 => Qos 'topic1' => 0, 'topic2' => 1, ]; // MQTT 5.0 $topics = [ // 主题 => 选项 'topic1' => [ 'qos' => 1, 'no_local' => true, 'retain_as_published' => true, 'retain_handling' => 2, ], 'topic2' => [ 'qos' => 2, 'no_local' => false, 'retain_as_published' => true, 'retain_handling' => 1, ], ]; ``` * 参数`array $properties` 属性,MQTT5 中需要,可选 ## unSubscribe() 取消订阅一个主题或者多个主题 ```php Simps\MQTT\Client->unSubscribe(array $topics, array $properties = []) ``` * 参数`array $topics` ```php $topics = ['topic1', 'topic2']; ``` * 参数`array $properties` 属性,MQTT5 中需要,可选 ## close() 正常断开与Broker的连接,`DISCONNECT(14)`报文会被发送到Broker ```php Simps\MQTT\Client->close(int $code = ReasonCode::NORMAL_DISCONNECTION, array $properties = []) ``` * 参数`int $code` 响应码,MQTT5 中需要,MQTT3直接调用即可 * 参数`array $properties` 属性,MQTT5中需要 ## auth() MQTT5 中新增的认证交换机制。 ```php Simps\MQTT\Client->auth(int $code = ReasonCode::SUCCESS, array $properties = []) ``` ## recv() 接收消息 ```php Simps\MQTT\Client->recv(): bool|arary|string ``` ## send() 发送消息 ```php Simps\MQTT\Client->send(array $data, $response = true) ``` * 参数`array $data` `$data`是需要发送的数据,必须包含`type`等信息 * 参数`bool $response` 是否需要回执。如果为`true`,会调用一次`recv()` ## ping() 发送心跳包 ```php Simps\MQTT\Client->ping() ``` ## buildMessageId() 生成MessageId ```php Simps\MQTT\Client->buildMessageId() ``` ## genClientId() 生成ClientId ```php Simps\MQTT\Client->genClientID(string $prefix = 'Simps_') ```