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
Client::__construct()Client::connect()Client::publish()Client::subscribe()Client::unsubscribe()Client::disconnect()Client::close()callback onConnectcallback onMessagecallback onErrorcallback onClose
__construct (string $address, [array $options])
Crea una instancia de cliente mqtt.
-
$addressdirección del servidor mqtt, en un formato similar a 'mqtt://test.mosquitto.org:1883'. -
$optionsarreglo 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) oMQIsdp(versión 3.1), por defecto esMQTTprotocol_level: Nivel de protocolo, cuandoprotocol_nameesMQTTel valor es4, cuandoprotocol_nameesMQIsdpel valor es3clean_session: Limpia la sesión, por defecto estrue. Si se establece enfalse, se pueden recibir mensajes fuera de línea de nivelQoS 1yQoS 2reconnect_period: Intervalo de tiempo para reconectar, por defecto1segundo,0significa no reconectarconnect_timeout: Tiempo de espera para conectarse a mqtt, por defecto30segundosusername: Nombre de usuario, opcionalpassword: Contraseña, opcionalwill: Mensaje de despedida, cuando el cliente se desconecta, el Broker enviará automáticamente el mensaje de despedida a otros clientes. El formato es:topic: temacontent: contenidoqos: nivelQoSretain: marca deretain
resubscribe: Al reconectarse después de una desconexión anómala, si se debe volver a suscribir a los temas anteriores, por defecto es truebindtose usa para especificar con qué ip y puerto locales iniciar la conexión al Broker, el valor por defecto es ''sslopciones ssl, por defecto esfalse, si se establece entrue, 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.phpdebugsi 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 esfalseuridirecció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
$topictema$contentmensaje$optionsarreglo de opciones, incluyendoqosnivelQoS, por defecto0retainmarca deretain, por defectofalsedupbandera de reenvío, por defectofalse
$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,$exceptiones el objeto de excepción, cuando no hay errores,$exceptionesnull, lo mismo a continuación.
subscribe(mixed $topic, [array $options], [callable $callback])
Suscribir a un tema o a múltiples temas
$topices una cadena (suscribir a un tema) o un arreglo (suscribir a múltiples temas),
cuando se suscriben a múltiples temas,$topices un arreglo con el tema como clave y el QoS como valor, por ejemploarray('topic1'=> 0, 'topic2'=> 1)$optionsarreglo de opciones de suscripción, que incluye las siguientes configuraciones:qosnivelQoS, por defecto0
$callback-function (\Exception $exception = null, array $granted = [])
Función de callback, se activará cuando la suscripción sea exitosa o ocurra un errorexceptionobjeto de excepción, esnullsi no hay errores, lo mismo a continuacióngrantedarreglo de resultados de suscripción, similar aarray('topic' => 'qos', 'topic' => 'qos')donde:topices el tema suscritoqosnivelQoSaceptado por el Broker
unsubscribe(mixed $topic, [callable $callback])
Cancelar la suscripción
$topices una cadena o un arreglo de cadenas, similar aarray('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
$topictema recibido$contentcontenido del mensaje recibido$mqttinstancia 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á.