workerman/mqtt
MQTT é um protocolo de transmissão de mensagens com uma arquitetura cliente-servidor e um modelo de publicação/assinatura, que se tornou uma parte importante da Internet das Coisas (IoT). Sua filosofia de design é leve, aberta, simples e padronizada, o que facilita sua implementação. Essas características o tornam uma excelente escolha para muitos cenários, especialmente em ambientes restritos, como comunicação máquina a máquina (M2M) e ambientes IoT.
workerman\mqtt é uma biblioteca cliente MQTT assíncrona baseada em workerman, que pode ser usada para receber ou enviar mensagens no protocolo MQTT. Suporta QoS 0, QoS 1, QoS 2. Suporta versões MQTT 3.1, 3.1.1, 5.
Endereço do projeto
https://github.com/walkor/mqtt
Instalação
composer require workerman/mqtt
Suporte
- MQTT
- MQTT5
- MQTT sobre websocket
Exemplo
subscribe.php
<?php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
$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();
Execute o comando php subscribe.php start para iniciar.
publish.php
<?php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
$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();
Execute o comando php publish.php start para iniciar.
workerman\mqtt\Client interface
Client::__construct()Client::connect()Client::publish()Client::subscribe()Client::unsubscribe()Client::disconnect()Client::close()callback onConnectcallback onMessagecallback onErrorcallback onClose
__construct (string $address, [array $options])
Cria uma instância do cliente MQTT.
-
$addressendereço do servidor MQTT, no formato 'mqtt://test.mosquitto.org:1883'. -
$optionsarray de opções do cliente, que pode conter as seguintes opções:keepalive: intervalo de tempo que o cliente envia batimentos cardíacos ao servidor, padrão é 50 segundos, definir como 0 significa não habilitar batimentos cardíacosclient_id: id do cliente, se não definido, o padrão é"workerman-mqtt-client-".mt_rand()protocol_name: nome do protocolo,MQTT(versão 3.1.1) ouMQIsdp(versão 3.1), padrão éMQTTprotocol_level: nível do protocolo, quandoprotocol_nameéMQTT, o valor é4, quandoprotocol_nameéMQIsdp, o valor é3clean_session: limpar sessão, padrão étrue. Definir comofalsepermite receber mensagens offline de níveisQoS 1eQoS 2reconnect_period: intervalo de tempo para reconexão, padrão é1segundo,0significa não tentar reconectarconnect_timeout: tempo limite para conectar ao MQTT, padrão30segundosusername: nome de usuário, opcionalpassword: senha, opcionalwill: mensagem de desgraça, que o Broker enviará automaticamente a outros clientes quando o cliente se desconectar. O formato é:topic: tópicocontent: conteúdoqos: nívelQoSretain: indicadorretain
resubscribe: depois que a conexão é abruptamente desconectada e reconectada, se deve reenviar a assinatura dos tópicos anteriores, padrão étruebindto: usado para designar qual IP e porta local se conecta ao Broker, padrão é ''ssl: opções SSL, padrão éfalse, se definido comotrue, conectará de forma SSL. Também suporta a passagem de um array de contexto SSL para configurar o certificado local, etc. O contexto SSL pode ser encontrado em https://php.net/manual/en/context.ssl.phpdebug: se ativar o modo de depuração, o modo de depuração pode imprimir informações detalhadas sobre a comunicação com o Broker, padrão éfalseuri: endereço URI para MQTT sobre websocket, geralmente é/mqtt
connect()
Conecta ao Broker
publish(String $topic, String $content, [array $options], [callable $callback])
Publica uma mensagem em um determinado tópico
$topictópico$contentmensagem$optionsarray de opções, incluindoqosnívelQoS, padrão0retainindicador retain, padrãofalsedupindicador de reenvio, padrãofalse
$callback-function (\Exception $exception = null)(não suportado quando QoS é 0), acionado quando ocorre um erro ou a publicação é bem-sucedida,$exceptioné o objeto de exceção, e quando não há erro,$exceptionénull, o mesmo se aplica a outras instâncias.
subscribe(mixed $topic, [array $options], [callable $callback])
Assina um ou mais tópicos
$topicpode ser uma string (para assinar um tópico) ou um array (para assinar múltiplos tópicos),
quando assinar vários tópicos,$topicé um array onde a chave é o tópico e o valor é o QoS, por exemplo,array('topic1'=> 0, 'topic2'=> 1)$optionsarray de opções de assinatura, contendo as seguintes configurações:qosnívelQoS, padrão0
$callback-function (\Exception $exception = null, array $granted = [])
Função de retorno de chamada, acionada quando a assinatura é bem-sucedida ou ocorre um erroexceptionobjeto de exceção, que énullquando não há erro, o mesmo se aplica a outras instânciasgrantedarray de resultados da assinatura, semelhante aarray('topic' => 'qos', 'topic' => 'qos')onde:topicé o tópico assinadoqosé o nívelQoSaceito pelo Broker
unsubscribe(mixed $topic, [callable $callback])
Cancela a assinatura
$topicpode ser uma string ou um array de strings, comoarray('topic1', 'topic2')$callback-function (\Exception $e = null), chamado quando a operação de cancelamento é bem-sucedida ou falha
disconnect()
Desconecta normalmente do Broker, o pacote DISCONNECT será enviado ao Broker.
close()
Desconecta forçosamente do Broker, não enviará o pacote DISCONNECT ao Broker.
callback onConnect(Client $mqtt)
Acionado quando a conexão com o Broker é estabelecida. Neste ponto, o pacote CONNACK do Broker já foi recebido.
callback onMessage(String $topic, String $content, Client $mqtt)
function (topic, message, packet) {}
Acionado quando o cliente recebe um pacote Publish
$topictópico recebido$contentconteúdo da mensagem recebida$mqttinstância do cliente MQTT.
callback onError(\Exception $exception = null)
Acionado quando ocorre algum erro na conexão
callback onClose()
Acionado quando a conexão é fechada, independentemente de ser o cliente que a fechou ou o servidor.