workerman/mqtt
MQTT è un protocollo di trasmissione dei messaggi basato su un'architettura client-server con modello di pubblicazione/sottoscrizione, ed è diventato una parte importante dell'Internet delle cose. La sua filosofia progettuale è leggera, aperta, semplice e standardizzata, il che lo rende facile da implementare. Queste caratteristiche lo rendono una scelta eccellente per molti scenari, specialmente per ambienti ristretti come la comunicazione machine-to-machine (M2M) e gli ambienti IoT.
workerman\mqtt è una libreria client MQTT asincrona basata su Workerman, utilizzabile per ricevere o inviare messaggi in protocollo MQTT. Supporta QoS 0, QoS 1 e QoS 2. Supporta le versioni MQTT 3.1 3.1.1 5.
Indirizzo del progetto
https://github.com/walkor/mqtt
Installazione
composer require workerman/mqtt
Supporto
- MQTT
- MQTT5
- MQTT su websocket
Esempi
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();
Esegui 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();
Esegui il comando php publish.php start per avviare.
workerman\mqtt\Client Interfaccia
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 un'istanza del client mqtt.
-
$addressindirizzo del server mqtt, in un formato simile a 'mqtt://test.mosquitto.org:1883'. -
$optionsarray di opzioni del client, possono essere impostate le seguenti opzioni:keepalive: intervallo di tempo con cui il client invia keepalive al server, di default 50 secondi, impostato su 0 significa che il keepalive non è abilitatoclient_id: id del client, se non impostato il valore di default è"workerman-mqtt-client-".mt_rand()protocol_name: nome del protocollo,MQTT(versione 3.1.1) oppureMQIsdp(versione 3.1), di default èMQTTprotocol_level: livello del protocollo, seprotocol_nameèMQTTil valore è4, seprotocol_nameèMQIsdpil valore è3clean_session: pulire la sessione, di default ètrue. Se impostato sufalse, è possibile ricevere messaggi offline di livelloQoS 1eQoS 2reconnect_period: intervallo di riconnessione, di default1secondo,0significa non riconnettersiconnect_timeout: tempo di timeout per la connessione mqtt, di default30secondiusername: nome utente, opzionalepassword: password, opzionalewill: messaggio di testamento, quando il client si disconnette, il broker invierà automaticamente il messaggio di testamento ad altri client. Formato:topic: argomentocontent: contenutoqos: livelloQoSretain: flagretain
resubscribe: quando la connessione si interrompe in modo anomalo e viene ristabilita, se riconnettersi ai temi precedenti, di default è truebindto: utilizzato per specificare quale ip e porta utilizzare per connettersi al broker, valore predefinito è ''ssl: opzioni ssl, di default èfalse, se impostato sutrue, la connessione avverrà in modo ssl. Supporta anche il passaggio di un array di contesto ssl per configurare certificati locali e altro, per il contesto ssl vedere https://php.net/manual/en/context.ssl.phpdebug: abilitare la modalità debug, la modalità debug può stampare informazioni dettagliate sulla comunicazione con il broker, di default èfalseuri: indirizzo uri per mqtt su websocket, di solito è/mqtt
connect()
Collegati al broker
publish(String $topic, String $content, [array $options], [callable $callback])
Pubblica un messaggio su un tema
$topicargomento$contentmessaggio$optionsarray di opzioni, compreseqoslivelloQoS, di default0retainflagretain, di defaultfalsedupflag di riesecuzione, di defaultfalse
$callback-function (\Exception $exception = null)(non supportato quandoQoSè 0), attivato quando si verifica un errore o quando la pubblicazione ha successo,$exceptionè l'oggetto eccezione, quando non si verifica alcun errore,$exceptionènull, idem per i successivi.
subscribe(mixed $topic, [array $options], [callable $callback])
Sottoscrivi un argomento o più argomenti
$topicè una stringa (sottoscrivi un argomento) o un array (sottoscrivi più argomenti),
quando si sottoscrivono più argomenti,$topicè un array dove l'argomento è la chiave e ilQoSè il valore, ad esempioarray('topic1'=> 0, 'topic2'=> 1)$optionsarray di opzioni di sottoscrizione, contiene le seguenti impostazioni:qoslivelloQoS, di default0
$callback-function (\Exception $exception = null, array $granted = [])
funzione di callback, attivato quando la sottoscrizione ha successo o si verifica un erroreexceptionoggetto eccezione, quando non si verifica alcun errore ènull, idem per i successivigrantedarray dei risultati della sottoscrizione, simile aarray('topic' => 'qos', 'topic' => 'qos')dove:topicè l'argomento sottoscrittoqosè il livelloQoSaccettato dal broker
unsubscribe(mixed $topic, [callable $callback])
Annulla la sottoscrizione
$topicè una stringa o un array di stringhe, simile aarray('topic1', 'topic2')$callback-function (\Exception $e = null), callback attivata in caso di successo o fallimento
disconnect()
Disconnetti normalmente dal broker, il pacchetto DISCONNECT verrà inviato al broker.
close()
Disconnetti forzatamente dal broker, non verrà inviato alcun pacchetto DISCONNECT al broker.
callback onConnect(Client $mqtt)
Attivato quando la connessione con il broker è stata stabilita. In questo momento si è già ricevuto il pacchetto CONNACK dal broker.
callback onMessage(String $topic, String $content, Client $mqtt)
function (topic, message, packet) {}
Attivato quando il client riceve un pacchetto Publish
$topicargomento ricevuto$contentcontenuto del messaggio ricevuto$mqttistanza del client mqtt.
callback onError(\Exception $exception = null)
Attivato quando si verifica un errore nel collegamento
callback onClose()
Attivato quando la connessione si chiude, sia che il client la chiuda attivamente sia che il server la chiuda verrà attivato onClose