workerman/mqtt
MQTT è un protocollo di trasporto dei messaggi di tipo publish/subscribe con architettura client/server, diventato una parte importante dell'Internet delle cose. Il suo design è leggero, aperto, semplice, standardizzato e facile da implementare. Queste caratteristiche lo rendono una scelta eccellente per molti scenari, specialmente per comunicazioni in ambienti limitati come la comunicazione tra macchine (M2M) e l'ambiente dell'Internet delle cose (IoT).
workerman\mqtt è una libreria client MQTT asincrona basata su Workerman, utilizzata per ricevere o inviare messaggi con il protocollo MQTT. Supporta i livelli di servizio 'QoS 0', 'QoS 1' e 'QoS 2', e le versioni 'MQTT' '3.1', '3.1.1' e '5'.
Indirizzo del progetto
https://github.com/walkor/mqtt
Installazione
composer require workerman/mqtt
Esempio
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();
Eseguire da terminale con il comando php subscribe.php start
per avviare
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();
Eseguire da terminale con il comando php publish.php start
per avviare.
Interfaccia di 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 un'istanza del client MQTT.
-
$address
indirizzo del server MQTT, nel formato 'mqtt://test.mosquitto.org:1883'. -
$options
array di opzioni per il client, che può includere le seguenti opzioni:keepalive
: intervallo di invio dei battiti cardiaci dal client al server, di default 50 secondi, impostare a 0 indica che i battiti cardiaci non sono attiviclient_id
: id del client, se non impostato di default è"workerman-mqtt-client-".mt_rand()
protocol_name
: nome del protocollo, 'MQTT'(versione 3.1.1) o 'MQIsdp'(versione 3.1), di default è 'MQTT'protocol_level
: livello del protocollo, seprotocol_name
è 'MQTT' il valore è4
, se è 'MQIsdp' il valore è3
clean_session
: sessione pulita, di default ètrue
. Impostando afalse
consente di ricevere messaggi offline di livelloQoS 1
eQoS 2
reconnect_period
: intervallo di ricongiunzione, di default1
secondo,0
indica nessuna riconnessioneconnect_timeout
: timeout della connessione MQTT, di default30
secondiusername
: nome utente, opzionalepassword
: password, opzionalewill
: messaggio di testamento, quando il client si disconnette, il broker invierà automaticamente un messaggio di testamento ad altri client. Formato:topic
: argomentocontent
: contenutoqos
: livelloQoS
retain
: flagretain
resubscribe
: quando la connessione si interrompe in modo anomalo e viene ristabilita, ri-sottoscrivi i topic precedenti, di default è truebindto
specifica l'indirizzo IP e la porta locale da usare per connettersi al broker, di default è ''ssl
opzioni ssl, di default èfalse
, se impostato atrue
, la connessione avviene tramite ssl. Supporta anche l'inserimento di un array di contesti ssl per configurare certificati locali, etc., il contesto ssl si riferisce a https://php.net/manual/en/context.ssl.phpdebug
abilita o disabilita la modalità di debug, la modalità debug può generare informazioni dettagliate sulla comunicazione con il broker, di default èfalse
connect()
Connette al broker.
publish(String $topic, String $content, [array $options], [callable $callback])
Pubblica un messaggio su un determinato topic.
$topic
argomento$content
messaggio$options
array di opzioni, comprensivo diqos
livelloQoS
, di default0
retain
flag di conservazione, di defaultfalse
dup
flag di duplicazione, di defaultfalse
$callback
-function (\Exception $exception = null)
(non supportato per QoS 0) triggerato in caso di errore o pubblicazione riuscita,$exception
è l'oggetto eccezione, in assenza di errori$exception
ènull
, il medesimo per le seguenti.
subscribe(mixed $topic, [array $options], [callable $callback])
Sottoscrive un singolo argomento o più argomenti.
$topic
è una stringa (per sottoscrivere un singolo argomento) o un array (per sottoscrivere più argomenti),
quando si sottoscrivono più argomenti,$topic
è un array in cui l'argomento è la chiave e il livelloQoS
è il valore, ad esempioarray('argomento1' => 0, 'argomento2' => 1)
$options
array di opzioni di sottoscrizione, che include le seguenti impostazioni:qos
livelloQoS
, di default0
$callback
-function (\Exception $exception = null, array $granted = [])
funzione di callback, triggerata in caso di successo o fallimento della sottoscrizioneexception
oggetto eccezione, in assenza di errori ènull
granted
array di risultati della sottoscrizione, simile aarray('argomento' => 'qos', 'argomento' => 'qos')
in cui:argomento
è l'argomento sottoscrittoqos
livelloQoS
accettato dal broker
unsubscribe(mixed $topic, [callable $callback])
Cancella la sottoscrizione di un singolo o più argomenti.
$topic
è una stringa o un array di stringhe, ad esempioarray('argomento1', 'argomento2')
$callback
-function (\Exception $e = null)
, triggerato in caso di successo o fallimento
disconnect()
Disconnette dal broker, invia il messaggio DISCONNECT
al broker.
close()
Forza la disconnessione dal broker, non invia il messaggio DISCONNECT
al broker.
callback onConnect(Client $mqtt)
Triggerato quando la connessione con il broker è stabilita. A questo punto è stato ricevuto il messaggio CONNACK
dal broker.
callback onMessage(String $topic, String $content, Client $mqtt)
function (topic, message, packet) {}
Triggerato quando il cliente riceve un messaggio di tipo publish
$topic
argomento ricevuto$content
contenuto del messaggio ricevuto$mqtt
istanza del client MQTT
callback onError(\Exception $exception = null)
Triggerato in caso di errore di connessione
callback onClose()
Triggerato quando la connessione viene chiusa, sia per la chiusura volontaria del client che per la chiusura del server.