MQTT — API
Фактический класс Client
Заголовок раздела «Фактический класс Client»src/Client.php содержит Workerman\Mqtt\Client, тогда как Composer настраивает localzet\MQTT\. Это разные имена PHP-классов; для использования необходимо устранить описанное в руководстве несоответствие autoload/transport.
Настройки конструктора
Заголовок раздела «Настройки конструктора»| Ключ | Default | Значение |
|---|---|---|
clean_session | 1 | Параметр сессии CONNECT. |
username, password | Пустые строки | Credentials broker. |
keepalive | 50 | Интервал MQTT keepalive; 0 отключает. |
protocol_name | MQTT | Имя протокола. |
protocol_level | 4 | Выбор версии; 5 переключает codec MQTT5. |
reconnect_period | 1 | Интервал reconnect, 0 отключает. |
connect_timeout | 30 | Ожидание CONNACK. |
resubscribe | true | Сохранять темы для восстановления подписок. |
bindto | Пустая строка | Локальный bind для исходящего соединения. |
ssl | false | SSL transport/context. |
debug | false | Отладочный вывод, включая чувствительные данные. |
properties | [] | MQTT5 properties CONNECT. |
client_id и will дополнительно используются при CONNECT. Client ID должен соответствовать вашей политике сессий broker; изменение ID не является продолжением прежней сессии.
| Метод | Смысл |
|---|---|
connect() | Привязать transport callbacks и начать подключение. |
subscribe($topic, array $options = [], $callback = null, $properties = []) | Отправить SUBSCRIBE и при необходимости сохранить темы. |
unsubscribe($topic, $callback = null, array $properties = []) | Отписаться. |
publish($topic, $content, $options = [], $callback = null, $properties = []) | Отправить PUBLISH с QoS/retain/dup. |
disconnect($code, $properties = []) | MQTT DISCONNECT и закрытие. |
auth($code, $properties = []) | AUTH packet для соответствующего протокольного обмена. |
close() | Закрыть transport. |
reconnect($after = 0) | Запланировать/выполнить новое подключение через transport. |
QoS проверяется как 0, 1 или 2; неподходящие темы/QoS направляются в error path. Для MQTT5 пустой publish-topic допускается только при соответствующем topic_alias. Свойства MQTT5 не добавляют автоматическую бизнес-валидацию payload.
Callbacks
Заголовок раздела «Callbacks»onConnect($client) — подтверждённое соединение, onMessage($topic, $content, $client) — входящий PUBLISH. Также предусмотрены onReconnect, onClose и onError. Subscription callback получает exception|null и granted-map; publish callback зависит от QoS acknowledgement.
Внешняя callback-логика выполняется в event loop. Не блокируйте её медленным I/O без подходящего механизма и не допускайте, чтобы исключение обработки сообщения маскировало политику повторной доставки.
Протокольные классы
Заголовок раздела «Протокольные классы»В Protocols/Mqtt.php и Mqtt5.php находятся input/encode/decode. MQTT5 Handle/EncodeV5, DecodeV5, Property/PackProperty, UnPackProperty и PacketMap кодируют поля/properties конкретных пакетов. Consts определяет команды, свойства и reason codes.
Codec работает с протокольными полями, а не с правами пользователя на topic. Доступ к topic и сессиям проверяются политикой broker. Вспомогательный Tools/Debug отображает байты в hex/text; не применяйте его к credentials и приватным payload в общедоступном логе.