2023-11-30 22:53:01 +08:00

201 lines
6.6 KiB
Markdown

# MQTT
Asynchronous MQTT client for PHP based on workerman.
# Installation
composer require workerman/mqtt
# 文档
[中文文档](https://www.workerman.net/doc/workerman/components/workerman-mqtt.html)
# Example
**subscribe.php**
```php
<?php
require __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
$worker = new Worker();
$worker->onWorkerStart = function(){
$mqtt = new Workerman\Mqtt\Client('mqtt://test.mosquitto.org:1883');
$mqtt->onConnect = function($mqtt) {
$mqtt->subscribe('test');
};
$mqtt->onMessage = function($topic, $content){
var_dump($topic, $content);
};
$mqtt->connect();
};
Worker::runAll();
```
Run with command ```php subscribe.php start```
**publish.php**
```php
<?php
require __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
$worker = new Worker();
$worker->onWorkerStart = function(){
$mqtt = new Workerman\Mqtt\Client('mqtt://test.mosquitto.org:1883');
$mqtt->onConnect = function($mqtt) {
$mqtt->publish('test', 'hello workerman mqtt');
};
$mqtt->connect();
};
Worker::runAll();
```
Run with command ```php publish.php start```
## API
* <a href="#construct"><code>Client::<b>__construct()</b></code></a>
* <a href="#connect"><code>Client::<b>connect()</b></code></a>
* <a href="#publish"><code>Client::<b>publish()</b></code></a>
* <a href="#subscribe"><code>Client::<b>subscribe()</b></code></a>
* <a href="#unsubscribe"><code>Client::<b>unsubscribe()</b></code></a>
* <a href="#disconnect"><code>Client::<b>disconnect()</b></code></a>
* <a href="#close"><code>Client::<b>close()</b></code></a>
* <a href="#onConnect"><code>callback <b>onConnect</b></code></a>
* <a href="#onMessage"><code>callback <b>onMessage</b></code></a>
* <a href="#onError"><code>callback <b>onError</b></code></a>
* <a href="#onClose"><code>callback <b>onClose</b></code></a>
-------------------------------------------------------
<a name="construct"></a>
### __construct (string $address, [array $options])
Create an instance by $address and $options.
* `$address` can be on the following protocols: 'mqtt', 'mqtts', 'mqtt://test.mosquitto.org:1883'.
* `$options` is the client connection options. Defaults:
* `keepalive`: `50` seconds, set to `0` to disable
* `client_id`: client id, default `workerman-mqtt-client-{$mt_rand}`
* `protocol_name`: `'MQTT'` or '`MQIsdp`'
* `protocol_level`: `'MQTT'` is `4` and '`MQIsdp`' is `3`
* `clean_session`: `true`, set to false to receive QoS 1 and 2 messages while
offline
* `reconnect_period`: `1` second, interval between two reconnections
* `connect_timeout`: `30` senconds, time to wait before a CONNACK is received
* `username`: the username required by your broker, if any
* `password`: the password required by your broker, if any
* `will`: a message that will sent by the broker automatically when
the client disconnect badly. The format is:
* `topic`: the topic to publish
* `content`: the message to publish
* `qos`: the QoS
* `retain`: the retain flag
* `resubscribe` : if connection is broken and reconnects,
subscribed topics are automatically subscribed again (default `true`)
* `bindto` default '', used to specify the IP address that PHP will use to access the network
* `ssl` default `false`, it can be set `true` or `ssl context` see http://php.net/manual/en/context.ssl.php
* `debug` default `false`, set `true` to show debug info
-------------------------------------------------------
<a name="connect"></a>
### connect()
Connect to broker specified by the given $address and $options in `__construct($address, $options)`.
-------------------------------------------------------
<a name="publish"></a>
### publish(String $topic, String $content, [array $options], [callable $callback])
Publish a message to a topic
* `$topic` is the topic to publish to, `String`
* `$message` is the message to publish, `String`
* `$options` is the options to publish with, including:
* `qos` QoS level, `Number`, default `0`
* `retain` retain flag, `Boolean`, default `false`
* `dup` mark as duplicate flag, `Boolean`, default `false`
* `$callback` - `function (\Exception $exception)`, fired when the QoS handling completes,
or at the next tick if QoS 0. No error occurs then `$exception` will be null.
-------------------------------------------------------
<a name="subscribe"></a>
### subscribe(mixed $topic, [array $options], [callable $callback])
Subscribe to a topic or topics
* `$topic` is a `String` topic or an `Array` which has as keys the topic name and as value
the QoS like `array('test1'=> 0, 'test2'=> 1)` to subscribe.
* `$options` is the options to subscribe with, including:
* `qos` qos subscription level, default 0
* `$callback` - `function (\Exception $exception, array $granted)`
callback fired on suback where:
* `exception` a subscription error or an error that occurs when client is disconnecting
* `granted` is an array of `array('topic' => 'qos', 'topic' => 'qos')` where:
* `topic` is a subscribed to topic
* `qos` is the granted qos level on it
-------------------------------------------------------
<a name="unsubscribe"></a>
### unsubscribe(mixed $topic, [callable $callback])
Unsubscribe from a topic or topics
* `$topic` is a `String` topic or an array of topics to unsubscribe from
* `$callback` - `function (\Exception $e)`, fired on unsuback. No error occurs then `$exception` will be null..
-------------------------------------------------------
<a name="disconnect"></a>
### disconnect()
Send DISCONNECT package to broker and close the client.
-------------------------------------------------------
<a name="close"></a>
### close()
Close the client without DISCONNECT package.
-------------------------------------------------------
<a name="onConnect"></a>
### callback onConnect(Client $mqtt)
Emitted on successful connection (`CONNACK` package received).
-------------------------------------------------------
<a name="onMessage"></a>
### callback onMessage(String $topic, String $content, Client $mqtt)
`function (topic, message, packet) {}`
Emitted when the client receives a publish packet
* `$topic` topic of the received packet
* `$content` payload of the received packet
* `$mqtt` Client instance.
-------------------------------------------------------
<a name="onError"></a>
### callback onError(\Exception $exception)
Emitted when something wrong for example the client cannot connect broker.
-------------------------------------------------------
<a name="onClose"></a>
### callback onClose()
Emitted when connection closed.
-------------------------------------------------------
# License
MIT