workerman/mqtt

MQTT es un protocolo de transmisión de mensajes basado en un modelo de publicación/suscripción en una arquitectura cliente-servidor, que se ha convertido en una parte importante del Internet de las Cosas. Su filosofía de diseño es ligera, abierta, simple y estandarizada, lo que facilita su implementación. Estas características lo convierten en una excelente opción para muchos escenarios, especialmente para entornos restringidos como la comunicación máquina a máquina (M2M) y el entorno IoT.

workerman\mqtt es una biblioteca de cliente MQTT asíncrona basada en workerman, que se puede utilizar para recibir o enviar mensajes en el protocolo MQTT. Soporta QoS 0, QoS 1 y QoS 2. Soporta las versiones 3.1, 3.1.1 y 5 de MQTT.

Dirección del proyecto

https://github.com/walkor/mqtt

Instalación

composer require workerman/mqtt

Soporte

  • MQTT
  • MQTT5
  • MQTT sobre websocket

Ejemplo

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();

Ejecutar en la línea de comandos 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();

Ejecutar en la línea de comandos php publish.php start para iniciar.

Interfaz workerman\mqtt\Client


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

Crea una instancia de cliente mqtt.

  • $address dirección del servidor mqtt, en un formato similar a 'mqtt://test.mosquitto.org:1883'.

  • $options arreglo de opciones del cliente, se pueden establecer las siguientes opciones:

    • keepalive: Intervalo de tiempo en el que el cliente envía un latido al servidor, por defecto 50 segundos, establecerlo en 0 significa que no se habilitará el latido.
    • client_id: ID del cliente, si no se establece, por defecto será "workerman-mqtt-client-".mt_rand()
    • protocol_name: Nombre del protocolo, MQTT (versión 3.1.1) o MQIsdp (versión 3.1), por defecto es MQTT
    • protocol_level: Nivel de protocolo, cuando protocol_name es MQTT el valor es 4, cuando protocol_name es MQIsdp el valor es 3
    • clean_session: Limpia la sesión, por defecto es true. Si se establece en false, se pueden recibir mensajes fuera de línea de nivel QoS 1 y QoS 2
    • reconnect_period: Intervalo de tiempo para reconectar, por defecto 1 segundo, 0 significa no reconectar
    • connect_timeout: Tiempo de espera para conectarse a mqtt, por defecto 30 segundos
    • username: Nombre de usuario, opcional
    • password: Contraseña, opcional
    • will: Mensaje de despedida, cuando el cliente se desconecta, el Broker enviará automáticamente el mensaje de despedida a otros clientes. El formato es:
      • topic: tema
      • content: contenido
      • qos: nivel QoS
      • retain: marca de retain
    • resubscribe : Al reconectarse después de una desconexión anómala, si se debe volver a suscribir a los temas anteriores, por defecto es true
    • bindto se usa para especificar con qué ip y puerto locales iniciar la conexión al Broker, el valor por defecto es ''
    • ssl opciones ssl, por defecto es false, si se establece en true, se conectará utilizando ssl. También se puede pasar un arreglo de contexto ssl para configurar certificados locales, etc., el contexto ssl se puede consultar en https://php.net/manual/en/context.ssl.php
    • debug si activar el modo de depuración, el modo de depuración puede mostrar información detallada sobre la comunicación con el Broker, por defecto es false
    • uri dirección uri para mqtt sobre websocket, generalmente es /mqtt

connect()

Conectar al Broker


publish(String $topic, String $content, [array $options], [callable $callback])

Publicar un mensaje en un tema específico

  • $topic tema
  • $content mensaje
  • $options arreglo de opciones, incluyendo
    • qos nivel QoS, por defecto 0
    • retain marca de retain, por defecto false
    • dup bandera de reenvío, por defecto false
  • $callback - function (\Exception $exception = null) (no soporta esta configuración cuando QoS es 0), se activará cuando ocurra un error o la publicación sea exitosa, $exception es el objeto de excepción, cuando no hay errores, $exception es null, lo mismo a continuación.

subscribe(mixed $topic, [array $options], [callable $callback])

Suscribir a un tema o a múltiples temas

  • $topic es una cadena (suscribir a un tema) o un arreglo (suscribir a múltiples temas),
    cuando se suscriben a múltiples temas, $topic es un arreglo con el tema como clave y el QoS como valor, por ejemplo array('topic1'=> 0, 'topic2'=> 1)
  • $options arreglo de opciones de suscripción, que incluye las siguientes configuraciones:
    • qos nivel QoS, por defecto 0
  • $callback - function (\Exception $exception = null, array $granted = [])
    Función de callback, se activará cuando la suscripción sea exitosa o ocurra un error
    • exception objeto de excepción, es null si no hay errores, lo mismo a continuación
    • granted arreglo de resultados de suscripción, similar a array('topic' => 'qos', 'topic' => 'qos') donde:
    • topic es el tema suscrito
    • qos nivel QoS aceptado por el Broker

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

Cancelar la suscripción

  • $topic es una cadena o un arreglo de cadenas, similar a array('topic1', 'topic2')
  • $callback - function (\Exception $e = null), callback activado en caso de éxito o error

disconnect()

Desconectar normalmente del Broker, el mensaje DISCONNECT será enviado al Broker.


close()

Desconectar forzosamente del Broker, no se enviará el mensaje DISCONNECT al Broker.


callback onConnect(Client $mqtt)

Se activa después de que se establece la conexión con el Broker. En este punto ya se ha recibido el mensaje CONNACK del Broker.


callback onMessage(String $topic, String $content, Client $mqtt)

function (topic, message, packet) {}

Se activa cuando el cliente recibe el mensaje de publicación

  • $topic tema recibido
  • $content contenido del mensaje recibido
  • $mqtt instancia del cliente mqtt.

callback onError(\Exception $exception = null)

Se activa cuando ocurre algún error en la conexión.


callback onClose()

Se activa cuando la conexión se cierra, ya sea que el cliente la cierre activamente o el servidor la cierre, el evento onClose se activará.

Más ejemplos examples/workerman