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


__construct (string $address, [array $options])

Cria uma instância do cliente MQTT.

  • $address endereço do servidor MQTT, no formato 'mqtt://test.mosquitto.org:1883'.

  • $options array 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íacos
    • client_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) ou MQIsdp (versão 3.1), padrão é MQTT
    • protocol_level: nível do protocolo, quando protocol_name é MQTT, o valor é 4, quando protocol_name é MQIsdp, o valor é 3
    • clean_session: limpar sessão, padrão é true. Definir como false permite receber mensagens offline de níveis QoS 1 e QoS 2
    • reconnect_period: intervalo de tempo para reconexão, padrão é 1 segundo, 0 significa não tentar reconectar
    • connect_timeout: tempo limite para conectar ao MQTT, padrão 30 segundos
    • username: nome de usuário, opcional
    • password: senha, opcional
    • will: mensagem de desgraça, que o Broker enviará automaticamente a outros clientes quando o cliente se desconectar. O formato é:
      • topic: tópico
      • content: conteúdo
      • qos: nível QoS
      • retain: indicador retain
    • resubscribe: depois que a conexão é abruptamente desconectada e reconectada, se deve reenviar a assinatura dos tópicos anteriores, padrão é true
    • bindto: usado para designar qual IP e porta local se conecta ao Broker, padrão é ''
    • ssl: opções SSL, padrão é false, se definido como true, 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.php
    • debug: 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 é false
    • uri: 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

  • $topic tópico
  • $content mensagem
  • $options array de opções, incluindo
    • qos nível QoS, padrão 0
    • retain indicador retain, padrão false
    • dup indicador de reenvio, padrão false
  • $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

  • $topic pode 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)
  • $options array de opções de assinatura, contendo as seguintes configurações:
    • qos nível QoS, padrão 0
  • $callback - function (\Exception $exception = null, array $granted = [])
    Função de retorno de chamada, acionada quando a assinatura é bem-sucedida ou ocorre um erro
    • exception objeto de exceção, que é null quando não há erro, o mesmo se aplica a outras instâncias
    • granted array de resultados da assinatura, semelhante a array('topic' => 'qos', 'topic' => 'qos') onde:
    • topic é o tópico assinado
    • qos é o nível QoS aceito pelo Broker

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

Cancela a assinatura

  • $topic pode ser uma string ou um array de strings, como array('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

  • $topic tópico recebido
  • $content conteúdo da mensagem recebida
  • $mqtt instâ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.

Mais exemplos examples/workerman