Wie überwacht
Laravel+Workerman MQTT? Der folgende Artikel stellt Ihnen vor, wie Laravel mit der Workerman-Befehlszeile zusammenarbeitet, um MQTT zu überwachen.
Das Unternehmen beschäftigt sich mit dem Internet der Dinge und der Server kommuniziert häufig über PHP mit dem MQTT-Protokoll. Als ich zum ersten Mal damit in Kontakt kam, verwendete das PHP-Framework , Ich habe festgestellt, dass es keine vergleichbaren Informationen gibt, also habe ich eine Weile herumgesucht, wurde in mehreren Projekten verwendet und die relevanten Schritte werden hier für Ihre eigene Referenz in der Zukunft und als Referenz für Freunde mit ähnlichen Bedürfnissen veröffentlicht.
Wie wir alle wissen, ist PHP eine Sprache, die speziell für das Web entwickelt wurde. Meistens kommuniziert es mit dem Webserver und kooperiert auch mit anderen Backend-Sprachen Um das „Frontend“ zu erstellen, schränkt das zugrunde liegende Design auch seine Eignung für diese Dinge im Web ein. Wenn Sie also den Server zur Überwachung von MQTT verwenden möchten, müssen Sie mit anderen Bibliotheken zusammenarbeiten. Es gibt zwei Hauptbibliotheken Hier erwähnt, nämlich workerman und swoole. Derzeit (2019.08) sind die Unterschiede in Bezug auf die tatsächliche Erfahrung mit der Verwendung des Servers zur Überwachung von MQTT wie folgt:
workerman:
Wolle:
Zusammenfassend habe ich mich schließlich für Workererman entschieden. In diesem Artikel wird Workererman als MQTT-Bibliothek für die Konfiguration und Verwendung verwendet.
Composer sollte für die moderne PHP-Entwicklung unverzichtbar sein. Grundsätzlich empfehlen wir die Verwendung von Composer, daher verwenden wir hier Composer, um Laravel zu installieren :
und wird speziell zum Testen von MQTT verwendet.Composer Create-Project --Prefer-Dist Laravel/Laravel Workerman-Mqtt '5.5.*' Stabilität und Sicherheit von Unternehmensprojekten oder entscheiden Sie sich für LTS. Der Projektname lautet
workerman-mqtt
Wenn Composer zu langsam ist, können Sie in Betracht ziehen, inländische Composer-Quellen wie Alibaba Cloud zu verwenden, um die Installation zu beschleunigen.
Worker-mqtt installieren
➜ cd workerman-mqtt ➜ composer require workerman/mqtt Using version ^1.0 for workerman/mqtt ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 2 installs, 0 updates, 0 removals - Installing workerman/workerman (v3.5.20): Loading from cache - Installing workerman/mqtt (v1.0): Loading from cache workerman/workerman suggests installing ext-event (For better performance. ) Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested. Writing lock file Generating optimized autoload files Carbon 1 is deprecated, see how to migrate to Carbon 2. https://carbon.nesbot.com/docs/#api-carbon-2 You can run './vendor/bin/upgrade-carbon' to get help in updating carbon and other frameworks and libraries that depend on it. > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover Discovered Package: fideloper/proxy Discovered Package: laravel/tinker Discovered Package: nesbot/carbon Package manifest generated successfully.
Neuer Artisan-Befehl
➜ php artisan make:command mqtt Console command created successfully.
workerman-mqtt/app/Console/Commands/mqtt.php
und ändern Sie die Datei in den folgenden Inhalt:<?php namespace App\Console\Commands; use Illuminate\Console\Command; use Workerman\Worker; class mqtt extends Command { protected $signature = 'mqtt {action}'; protected $description = 'PHP Server MQTT Client'; protected $client_id = 'php-server'; public function __construct() { parent::__construct(); } public function handle() { global $argv; $arg = $this->argument('action'); $argv [1] = $arg; $worker = new Worker(); $worker->count = 1; $worker->onWorkerStart = function () { $mqtt = new \Workerman\Mqtt\Client("mqtt://" . env('MQTT_HOST') . ":" . env('MQTT_PORT'), array( // 'ssl' => array( // 'local_cert' => base_path() . '/path/mqtt/client.crt', // 'local_pk' => base_path() . '/path/mqtt/client.key', // 'cafile' => base_path() . '/path/mqtt/ca.crt', // 'verify_peer' => false, // 'allow_self_signed' => true, // ), // $mqtt->transport = 'ssl'; 'username' => env('MQTT_USER'), 'password' => env('MQTT_PASSWORD'), 'debug' => env('MQTT_DEBUG'), 'client_id' => $this->client_id . mt_rand(0, 999), 'will' => [ 'topic' => 'status/' . $this->client_id, 'content' => 0, 'qos' => 2, 'retain' => true, ] )); $mqtt->onConnect = function ($mqtt) { $mqtt->subscribe('/iot/#'); }; $mqtt->onMessage = function ($topic, $data, $mqtt) { var_dump($topic); var_dump($data); //TODO 业务代码 //publish消息到topic $mqtt->publish('test', 'hello workerman mqtt'); }; $mqtt->connect(); }; Worker::runAll(); } }
MQTT_HOST=mqtt-broker.test MQTT_PORT=1883 MQTT_USER=username MQTT_PASSWORD=password MQTT_DEBUG=true
topic in onMessage das Thema Nachricht und Daten sind die spezifischen Nachrichteninformationen. Mit diesen beiden können wir unsere Geschäftslogik in onMessage schreiben. Natürlich können wir auch einige Komponenten des Laravel-Frameworks selbst einführen, z. B. Datenbanken, Protokolle usw mit anderen Diensten wie Redis, Message Queue MQ usw. Caching oder Verwendung von Message Queue usw. Das Ausführen des mqtt-Befehls
➜ php artisan mqtt start Workerman[artisan] start in DEBUG mode ------------------------------------- WORKERMAN -------------------------------------- Workerman version:3.5.20 PHP version:7.1.30 -------------------------------------- WORKERS --------------------------------------- proto user worker listen processes status tcp zoco none none 1 [OK] -------------------------------------------------------------------------------------- Press Ctrl+C to stop. Start success. -> Try to connect to mqtt://mqtt-broker.test:1883 -- Tcp connection established -> Send CONNECT package client_id:php-server-superuser-subscribe95 username:username password:password clean_session:1 protocol_name:MQTT protocol_level:4 <- Recv CONNACK package, MQTT connect success -> Send SUBSCRIBE package, topic:/iot/# message_id:1 <- Recv SUBACK package, message_id:1
start
nicht zu vergessen, den von Workerman selbst benötigten Startparameter.Da sich die Workerman-Einstellung im Speicher befindet, wird sie unter normalen Umständen kontinuierlich überwacht. Selbst wenn das Programm einen Fehler aufweist und beendet wird, erstellt der Workerman automatisch einen neuen Prozess zur Verarbeitung.
Wenn die Produktionsumgebung MQTT-Daten über einen längeren Zeitraum überwachen und verarbeiten muss, wird empfohlen, zur Verwaltung Befehle wie systemctl zu verwenden.Mängel
➜ php artisan mqtt start Workerman[artisan] start in DEBUG mode Workerman[artisan] already running
Weitere Kenntnisse zum Thema Programmierung finden Sie unter: Programmierlehre! !
Das obige ist der detaillierte Inhalt vonWie arbeitet Laravel mit der Workerman-Befehlszeile zusammen, um MQTT zu überwachen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!