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


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

Crea un'istanza del client mqtt.

  • $address indirizzo del server mqtt, in un formato simile a 'mqtt://test.mosquitto.org:1883'.

  • $options array 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 è abilitato
    • client_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) oppure MQIsdp (versione 3.1), di default è MQTT
    • protocol_level: livello del protocollo, se protocol_name è MQTT il valore è 4, se protocol_name è MQIsdp il valore è 3
    • clean_session: pulire la sessione, di default è true. Se impostato su false, è possibile ricevere messaggi offline di livello QoS 1 e QoS 2
    • reconnect_period: intervallo di riconnessione, di default 1 secondo, 0 significa non riconnettersi
    • connect_timeout: tempo di timeout per la connessione mqtt, di default 30 secondi
    • username: nome utente, opzionale
    • password: password, opzionale
    • will: messaggio di testamento, quando il client si disconnette, il broker invierà automaticamente il messaggio di testamento ad altri client. Formato:
      • topic: argomento
      • content: contenuto
      • qos: livello QoS
      • retain: flag retain
    • resubscribe: quando la connessione si interrompe in modo anomalo e viene ristabilita, se riconnettersi ai temi precedenti, di default è true
    • bindto: utilizzato per specificare quale ip e porta utilizzare per connettersi al broker, valore predefinito è ''
    • ssl: opzioni ssl, di default è false, se impostato su true, 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.php
    • debug: abilitare la modalità debug, la modalità debug può stampare informazioni dettagliate sulla comunicazione con il broker, di default è false
    • uri: 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

  • $topic argomento
  • $content messaggio
  • $options array di opzioni, comprese
    • qos livello QoS, di default 0
    • retain flag retain, di default false
    • dup flag di riesecuzione, di default false
  • $callback - function (\Exception $exception = null) (non supportato quando QoS è 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 il QoS è il valore, ad esempio array('topic1'=> 0, 'topic2'=> 1)
  • $options array di opzioni di sottoscrizione, contiene le seguenti impostazioni:
    • qos livello QoS, di default 0
  • $callback - function (\Exception $exception = null, array $granted = [])
    funzione di callback, attivato quando la sottoscrizione ha successo o si verifica un errore
    • exception oggetto eccezione, quando non si verifica alcun errore è null, idem per i successivi
    • granted array dei risultati della sottoscrizione, simile a array('topic' => 'qos', 'topic' => 'qos') dove:
    • topic è l'argomento sottoscritto
    • qos è il livello QoS accettato dal broker

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

Annulla la sottoscrizione

  • $topic è una stringa o un array di stringhe, simile a array('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

  • $topic argomento ricevuto
  • $content contenuto del messaggio ricevuto
  • $mqtt istanza 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

Ulteriori esempi examples/workerman