webman/mqtt
MQTT ist ein Publish/Subscribe-Nachrichtenübertragungsprotokoll mit Client-Server-Architektur und hat sich zu einem wichtigen Bestandteil des Internets der Dinge entwickelt. Sein Designkonzept ist leichtgewichtig, offen, einfach und standardisiert und daher einfach zu implementieren. Diese Merkmale machen es in vielen Szenarien zu einer guten Wahl, insbesondere für eingeschränkte Umgebungen wie Maschine-zu-Maschine-Kommunikation (M2M) und das Internet der Dinge (IoT).
webman\mqtt ist eine auf Workerman basierende asynchrone MQTT-Client-Bibliothek, die für den Empfang oder das Senden von MQTT-Protokollnachrichten verwendet werden kann. Es unterstützt QoS 0
, QoS 1
, QoS 2
und die Versionen MQTT
3.1
, 3.1.1
, 5
.
Projektadresse
https://github.com/walkor/mqtt
Installation
composer require workerman/mqtt
Beispiel
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();
Zum Starten in der Befehlszeile eingeben: php subscribe.php start
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();
Zum Starten in der Befehlszeile eingeben: php publish.php start
webman\mqtt\Client-Schnittstelle
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])
Erstellt eine MQTT-Client-Instanz.
-
$address
Adresse des MQTT-Servers im Format 'mqtt://test.mosquitto.org:1883'. -
$options
Optionen-Array für den Client, das folgende Optionen enthalten kann:keepalive
: Zeitintervall, in dem der Client regelmäßige Herzschläge an den Server sendet, standardmäßig 50 Sekunden, mit 0 wird kein Herzschlag aktiviertclient_id
: Client-ID, wenn nicht festgelegt, wird standardmäßig"workerman-mqtt-client-".mt_rand()
protocol_name
: Name des Protokolls,MQTT
(Version 3.1.1) oderMQIsdp
(Version 3.1) standardmäßigMQTT
protocol_level
: Protokollversion, 4, wennprotocol_name
MQTT
ist, und 3, wennprotocol_name
MQIsdp
istclean_session
: Clean-Sitzung, standardmäßigtrue
. Wenn auffalse
gesetzt, können Offline-Nachrichten mitQoS 1
undQoS 2
empfangen werdenreconnect_period
: Zeitspanne für die erneute Verbindung, standardmäßig 1 Sekunde, 0 bedeutet keine erneute Verbindungconnect_timeout
: Verbindungs-Timeout für MQTT, standardmäßig 30 Sekundenusername
: Benutzername, optionalpassword
: Passwort, optionalwill
: Testament-Nachricht, die der Broker automatisch an andere Clients sendet, wenn der Client getrennt ist. Das Format ist:topic
: Themacontent
: Inhaltqos
:QoS
-Levelretain
:retain
-Flag
resubscribe
: Beim erneuten Verbinden nach einem Verbindungsfehler die zuvor abonnierten Themen erneut abonnieren, standardmäßigtrue
bindto
: Legt fest, mit welcher IP-Adresse und welchen Port der Client eine Verbindung zum Broker herstellen soll, standardmäßig ''ssl
: SSL-Option, standardmäßigfalse
. Wenn auftrue
gesetzt, wird eine SSL-Verbindung hergestellt. Zusätzlich kann ein Array für den SSL-Kontext übergeben werden, um lokale Zertifikate zu konfigurieren. Der SSL-Kontext ist dem folgenden Link zu entnehmen: https://php.net/manual/en/context.ssl.phpdebug
: Aktiviert den Debug-Modus, welcher detaillierte Informationen zur Kommunikation mit dem Broker ausgibt, standardmäßigfalse
connect()
Stellt eine Verbindung zum Broker her.
publish(String $topic, String $content, [array $options], [callable $callback])
Veröffentlicht eine Nachricht zu einem bestimmten Thema
$topic
Thema$content
Nachricht$options
Options-Array, einschließlichqos
QoS
-Level, standardmäßig0
retain
Behalten-Flag, standardmäßigfalse
dup
Wiederholungsflag, standardmäßigfalse
$callback
-function (\Exception $exception = null)
, (Diese Einstellungen werden nicht für QoS 0 unterstützt) wird ausgelöst, wenn ein Fehler auftritt oder die Veröffentlichung erfolgreich ist.$exception
ist das Ausnahmeobjekt, dasnull
ist, wenn kein Fehler aufgetreten ist, und dasselbe gilt für die folgenden.
subscribe(mixed $topic, [array $options], [callable $callback])
Abonniert ein oder mehrere Themen
$topic
ist ein String (ein Thema abonnieren) oder ein Array (mehrere Themen abonnieren),
wenn mehrere Themen abonniert werden, ist$topic
ein Array mit Themen als Schlüssel und QoS als Wert, z.B.array('topic1'=> 0, 'topic2'=> 1)
$options
Abonnement-Options-Array, einschließlich der folgenden Einstellungen:qos
QoS
-Level, standardmäßig0
$callback
-function (\Exception $exception = null, array $granted = [])
Callback-Funktion, die ausgelöst wird, wenn das Abonnieren erfolgreich ist oder ein Fehler auftrittexception
Ausnahmeobjekt, dasnull
ist, wenn kein Fehler auftritt, und dasselbe gilt für die folgendengranted
Array mit Ergebnissen des Abonnements, ähnlich wiearray('topic' => 'qos', 'topic' => 'qos')
wobei:topic
das abonnierte Thema istqos
das empfangeneQoS
-Level des Brokers
unsubscribe(mixed $topic, [callable $callback])
Beendet das Abonnement
$topic
ist ein String oder ein Array von Strings, ähnlich wiearray('topic1', 'topic2')
$callback
-function (\Exception $e = null)
, wird ausgelöst, wenn erfolgreich oder fehlerhaft
disconnect()
Trennt die Verbindung zum Broker ordnungsgemäß, DISCONNECT
-Nachricht wird an den Broker gesendet.
close()
Trennt die Verbindung zum Broker gewaltsam, es wird keine DISCONNECT
-Nachricht an den Broker gesendet.
callback onConnect(Client $mqtt)
Wird ausgelöst, wenn die Verbindung zum Broker hergestellt ist. Zu diesem Zeitpunkt wurde bereits die CONNACK
-Nachricht des Brokers empfangen.
callback onMessage(String $topic, String $content, Client $mqtt)
function (topic, message, packet) {}
Wird ausgelöst, wenn der Client eine Publish-Nachricht empfängt
$topic
das empfangene Thema$content
der empfangene Nachrichteninhalt$mqtt
MQTT-Clientinstanz.
callback onError(\Exception $exception = null)
Wird ausgelöst, wenn ein Verbindungsfehler auftritt
callback onClose()
Wird ausgelöst, wenn die Verbindung geschlossen wird, unabhängig davon, ob die Client oder der Server die Verbindung trennt.