workerman/mqtt
MQTT es un protocolo de transporte de mensajes en modo de publicación/suscripción con una arquitectura cliente-servidor que se ha convertido en una parte importante de Internet de las cosas. Su diseño se caracteriza por ser ligero, abierto, simple y estándar, y es fácil de implementar. Estas características lo convierten en una buena elección para muchos escenarios, especialmente para entornos restringidos como la comunicación máquina a máquina (M2M) y el Internet de las cosas (IoT).
workerman\mqtt es una biblioteca de cliente MQTT asincrónico basada en workerman que se puede utilizar para recibir o enviar mensajes con el protocolo MQTT. Es compatible con QoS 0
, QoS 1
y QoS 2
. Admite las versiones MQTT
3.1
, 3.1.1
y 5
.
Repositorio
https://github.com/walkor/mqtt
Instalación
composer require workerman/mqtt
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 con 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 con php publish.php start
para iniciar.
Interfaz de workerman\mqtt\Client
Client::__construct()
Client::connect()
Client::publish()
Client::subscribe()
Client::unsubscribe()
Client::disconnect()
Client::close()
callback onConnect
callback onMessage
callback onError
callback onClose
__construct (string $address, [array $options])
Crea una instancia de cliente MQTT.
$address
es la dirección del servidor MQTT en formato similar a 'mqtt://test.mosquitto.org:1883'.$options
es un array de opciones del cliente, que puede configurar las siguientes opciones:keepalive
: Intervalo de tiempo en segundos en el que el cliente envía un mensaje de latido al servidor, por defecto es 50 segundos, configurado en 0 significa desactivar el latido.client_id
: ID del cliente, si no se establece, el valor predeterminado es"workerman-mqtt-client-".mt_rand()
protocol_name
: Nombre del protocolo,MQTT
(versión 3.1.1) oMQIsdp
(versión 3.1), por defecto esMQTT
protocol_level
: Nivel del protocolo, conprotocol_name
comoMQTT
el valor es4
, conprotocol_name
comoMQIsdp
el valor es3
clean_session
: Sesión limpia, por defecto estrue
. Configurado comofalse
permite recibir mensajes sin conexión con nivelesQoS 1
yQoS 2
reconnect_period
: Intervalo de tiempo para reconexión, por defecto es1
segundo,0
significa no reconexiónconnect_timeout
: Tiempo de espera de conexión MQTT, por defecto es30
segundosusername
: Nombre de usuario, opcionalpassword
: Contraseña, opcionalwill
: Mensaje de voluntad, cuando el cliente se desconecta, el broker envía automáticamente un mensaje de voluntad a otros clientes. El formato es:topic
: Temacontent
: Contenidoqos
: Nivel deQoS
retain
: Marcar para retener
resubscribe
: Cuando la conexión se desconecta de forma anormal y se vuelve a conectar, ¿volver a suscribirse a los temas anteriores?, por defecto estrue
bindto
: Se utiliza para especificar a qué IP y puerto local debe conectarse el cliente al broker, el valor predeterminado es ''ssl
: Opción SSL, por defecto esfalse
, si se establece comotrue
, se conecta utilizando SSL. También admite pasar un array de contexto SSL para configurar certificados locales, etc., el contexto SSL se refiere a https://php.net/manual/en/context.ssl.phpdebug
: ¿Activar el modo de depuración?, el modo de depuración puede generar información detallada sobre la comunicación con el broker, por defecto esfalse
connect()
Conectarse al broker.
publish(String $topic, String $content, [array $options], [callable $callback])
Publica un mensaje en un tema dado.
$topic
es el tema$content
es el mensaje$options
es un array de opciones que incluye:qos
: Nivel deQoS
, por defecto es0
retain
: Marcar para retener, por defecto esfalse
dup
: Bandera de repetición, por defecto esfalse
$callback
-function (\Exception $exception = null)
(no compatible conQoS 0
) Se activa cuando se produce un error o cuando se publica con éxito,$exception
es el objeto de excepción, cuando no hay errores,$exception
esnull
, lo mismo para las siguientes funciones.
subscribe(mixed $topic, [array $options], [callable $callback])
Suscribe a uno o varios temas.
$topic
es una cadena (suscribirse a un tema) o un array (suscribirse a varios temas)
cuando se suscribe a varios temas,$topic
es un array de temas y niveles deQoS
, por ejemploarray('tema1'=> 0, 'tema2'=> 1)
$options
es un array que incluye:qos
: Nivel deQoS
, por defecto es0
$callback
-function (\Exception $exception = null, array $granted = [])
)
Función de callback, se activa cuando la suscripción es exitosa o cuando se produce un error.exception
: Objeto de excepción, esnull
si no hay errores.granted
: Array de resultados de la suscripción, similar aarray('tema' => 'qos', 'tema' => 'qos')
donde:tema
es el tema suscritoqos
es el nivel deQoS
aceptado por el broker.
unsubscribe(mixed $topic, [callable $callback])
Cancelar la suscripción a uno o varios temas.
$topic
es una cadena o un array de cadenas, similar aarray('tema1', 'tema2')
.$callback
-function (\Exception $e = null)
, se activa cuando la operación tiene éxito o falla.
disconnect()
Desconectarse del broker de manera normal, se enviará un mensaje DISCONNECT
al broker.
close()
Desconectarse del broker de manera forzada, no se enviará un mensaje DISCONNECT
al broker.
callback onConnect(Client $mqtt)
Se activa cuando 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)
Se activa cuando el cliente recibe un mensaje de publicación.
$topic
es el tema recibido$content
es el contenido del mensaje recibido$mqtt
es la instancia del cliente MQTT.
callback onError(\Exception $exception = null)
Se activa cuando se produce un error en la conexión.
callback onClose()
Se activa cuando se cierra la conexión, ya sea porque el cliente la cerró voluntariamente o porque el servidor la cerró.