workerman/mqtt

MQTT est un protocole de transfert de messages en mode publication/abonnement basé sur une architecture client-serveur, qui est devenu une composante essentielle de l'Internet des objets (IoT). Son idée directrice est d'être léger, ouvert, simple et normé, ce qui facilite son implémentation. Ces caractéristiques en font un excellent choix pour de nombreux scénarios, en particulier dans des environnements contraints comme les communications machine à machine (M2M) et les environnements IoT.

workerman\mqtt est une bibliothèque cliente MQTT asynchrone basée sur workerman, pouvant être utilisée pour recevoir ou envoyer des messages au format MQTT. Elle prend en charge QoS 0, QoS 1, et QoS 2. Elle supporte les versions MQTT 3.1 3.1.1 5.

Adresse du projet

https://github.com/walkor/mqtt

Installation

composer require workerman/mqtt

Support

  • MQTT
  • MQTT5
  • MQTT sur websocket

Exemple

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();

Exécutez dans la ligne de commande php subscribe.php start pour démarrer

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();

Exécutez dans la ligne de commande php publish.php start pour démarrer.

workerman\mqtt\Client Interface


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

Crée une instance de client mqtt.

  • $address adresse du serveur mqtt, format similaire à 'mqtt://test.mosquitto.org:1883'.

  • $options tableau des options du client, pouvant inclure les options suivantes :

    • keepalive: l'intervalle de temps entre les envois de heartbeat au serveur, par défaut 50 secondes, un réglage à 0 désactive le heartbeat.
    • client_id: identifiant du client, par défaut c'est "workerman-mqtt-client-".mt_rand()
    • protocol_name: nom du protocole, MQTT (version 3.1.1) ou MQIsdp (version 3.1), par défaut MQTT
    • protocol_level: niveau de protocole, valeur 4 lorsque protocol_name est MQTT, valeur 3 lorsque protocol_name est MQIsdp
    • clean_session: nettoyage de la session, par défaut true. Réglé sur false, cela permet de recevoir des messages hors ligne de niveau QoS 1 et QoS 2.
    • reconnect_period: intervalle de reconnexion, par défaut 1 seconde, 0 signifie pas de reconnexion.
    • connect_timeout: temps d'attente pour la connexion mqtt, par défaut 30 secondes.
    • username: nom d'utilisateur, optionnel.
    • password: mot de passe, optionnel.
    • will: message de dernier souhait, lorsque le client se déconnecte, le Broker enverra automatiquement ce message aux autres clients. Format :
      • topic: sujet
      • content: contenu
      • qos: niveau QoS
      • retain: marque retain
    • resubscribe : si le client doit se réabonner aux sujets précédents après une déconnexion anormale, par défaut true.
    • bindto permet de spécifier sur quel IP et port le client se connecte au Broker, valeur par défaut est ''
    • ssl options ssl, par défaut false, si réglé sur true, une connexion ssl est établie. Supporte également un tableau de contexte ssl pour configurer les certificats locaux, le contexte ssl est référencé ici https://php.net/manual/en/context.ssl.php
    • debug active ou non le mode debug, qui peut afficher des informations détaillées sur la communication avec le Broker, par défaut false.
    • uri adresse uri pour mqtt sur websocket, généralement /mqtt.

connect()

Se connecter au Broker.


publish(String $topic, String $content, [array $options], [callable $callback])

Publier un message sur un sujet donné.

  • $topic sujet
  • $content message
  • $options tableau d'options, comprenant
    • qos niveau QoS, par défaut 0
    • retain marque retain, par défaut false
    • dup indicateur de répétion, par défaut false
  • $callback - function (\Exception $exception = null) (non supporté pour QoS 0), déclenché en cas d'erreur ou de succès de publication, $exception est l'objet d'exception, lorsqu'aucune erreur ne se produit, $exception est null, et vice versa.

subscribe(mixed $topic, [array $options], [callable $callback])

S'abonner à un sujet ou plusieurs sujets.

  • $topic peut être une chaîne (s'abonner à un sujet) ou un tableau (s'abonner à plusieurs sujets).
    Lors de l'abonnement à plusieurs sujets, $topic est un tableau associatif où le sujet est la clé et le QoS est la valeur, par exemple array('topic1'=> 0, 'topic2'=> 1).
  • $options tableau d'options d'abonnement, comprenant les paramètres suivants :
    • qos niveau QoS, par défaut 0.
  • $callback - function (\Exception $exception = null, array $granted = [])
    Fonction de rappel, déclenchée lors du succès de l'abonnement ou en cas d'erreur.
    • exception objet d'exception, null en l'absence d'erreurs, et vice versa.
    • granted tableau des résultats d'abonnement, similaire à array('topic' => 'qos', 'topic' => 'qos'), où :
    • topic est le sujet abonné.
    • qos niveau QoS accepté par le Broker.

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

Se désabonner.

  • $topic est une chaîne ou un tableau de chaînes, par exemple array('topic1', 'topic2').
  • $callback - function (\Exception $e = null), rappel déclenché lors du succès ou de l'échec.

disconnect()

Se déconnecter normalement du Broker, le message DISCONNECT sera envoyé au Broker.


close()

Se déconnecter de force du Broker, ne pas envoyer le message DISCONNECT au Broker.


callback onConnect(Client $mqtt)

Déclenchée lorsque la connexion avec le Broker est établie. À ce moment, le message CONNACK du Broker a déjà été reçu.


callback onMessage(String $topic, String $content, Client $mqtt)

function (topic, message, packet) {}

Déclenchée lorsque le client reçoit un message Publish.

  • $topic sujet reçu.
  • $content contenu du message reçu.
  • $mqtt instance de client mqtt.

callback onError(\Exception $exception = null)

Déclenchée lorsqu'une certaine erreur se produit lors de la connexion.


callback onClose()

Déclenchée lorsque la connexion est fermée, que ce soit par une fermeture active du client ou par la fermeture du serveur.

Plus d'exemples examples/workerman