Laravel は Workerman コマンドラインとどのように連携して MQTT を監視しますか
Laravel WorkermanMQTT を監視するにはどうすればよいですか?以下の記事では、Laravel が Workerman コマンドラインと連携して MQTT を監視する方法を紹介しますので、ご参考になれば幸いです。
同社はモノのインターネットに取り組んでいます。サーバーは、MQTT プロトコルを介して PHP を通じてモノのインターネット デバイスと通信することがよくあります。PHP フレームワークでは Laravel が使用されています。 . 初めてこれに接したときに発見しました。比較できる情報はありません。しばらく調査しており、すでにいくつかのプロジェクトで使用しています。将来の参考のために、関連する手順をここに投稿します。同じようなニーズを持つ友人の参考に。
最初に書いた
ご存知のとおり、PHP は Web 専用に設計された言語であり、ほとんどの場合、Web サーバーと通信します。バックエンド。他のバックエンド言語と組み合わせて「フロントエンド」としても使用されます。また、その基礎となる設計により、Web 上でより適した処理を行う能力も制限されます。したがって、使用したい場合は、 MQTT を監視するサーバーを使用するには、ここで説明したように、他のライブラリと連携する必要があります。主なライブラリは、workerman と swoole の 2 つです。現時点 (2019.08) で MQTT を監視するサーバーを実際に使用した経験としては、次のとおりです。 :
workerman:
- インストールが簡単、composer コマンド 1 行でインストールできます [関連推奨事項: "workerman チュートリアル "]
- MQTT ライブラリは多くの人に使用されており、更新日も新しいです
- MQTT TLS/SSL 暗号化をサポート
- ドキュメントの詳細
swoole :
- インストールは Workerman よりも複雑です。各オペレーティング環境は個別にインストールする必要があり、コンパイルする必要がある場合もあります。
- MQTT を使用する人は少なく、更新されてから長い時間が経ちます。
- ドキュメントが少なく、見つかる情報も少なくなります。
- MQTT は使用しません。 TLS/SSL 暗号化をサポートする 暗号化が必要な場合 環境はあまり優しくない可能性があります
まとめると、最終的に workerman を選択しました。この記事では、構成と使用のための MQTT ライブラリとして workerman を使用します。
Laravel をインストールします (すでにインストールされている場合は省略できます)
Composer は最新の PHP 開発には不可欠です。基本的に、より大きなフレームワークでは Composer の使用が推奨されるため、ここではComposer を使用して Laravel をインストールします。コマンドは次のとおりです:
composer create-project --prefer-dist laravel/laravel workman-mqtt '5.5.*'
Laravel指定バージョン 現在(2019.08)唯一のLTSバージョンは5.5.xですが、エンタープライズプロジェクトの安定性とセキュリティを考慮するとやはりLTSが選ばれます。プロジェクト名は workerman-mqtt で、MQTT のテストに特別に使用されます。
コンポーザーが遅すぎる場合は、Alibaba Cloud などの国内のコンポーザー ソースを使用してインストールを高速化することを検討できます。
worker-mqtt のインストール
上で述べたように、composer を使用して worker-mqtt をインストールするのは非常に簡単で、必要なコマンドは
➜ 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.
新しいartisanコマンドを作成する
Laravelとworkermanを使用してMQTTを監視しているため、当然ながらartisanが最良の選択です。Laravelコンポーネントを使用することもできます。リスニングプロセスを管理するためのArtisanコマンド。関連するコマンド ファイルを作成します:
➜ php artisan make:command mqtt Console command created successfully.
次に、生成された workerman-mqtt/app/Console/Commands/mqtt.php ファイルを編集し、ファイルを次の内容に変更します:
<?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(); } }
次に、プロジェクトのルート ディレクトリにある .env ファイルに移動し、次の項目を追加します。
MQTT_HOST=mqtt-broker.test MQTT_PORT=1883 MQTT_USER=username MQTT_PASSWORD=password MQTT_DEBUG=true
その中で、onConnect の subscribe の後に新しいメッセージの場合、onMessage の topic はメッセージのトピックであり、data は特定のメッセージ情報です。これら 2 つを使用して、onMessage でビジネス ロジックを記述することができますデータベースやログなど、Laravel フレームワーク自体の一部のコンポーネントは、Redis、メッセージ キュー MQ などの他のサービスと併用して、メッセージ キューをキャッシュしたり使用したりすることもできます。 。
mqtt コマンドを実行します
これは他の Artisan コマンドと似ていますが、コマンドラインから直接実行するだけです:
➜ 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 は、workerman 自体に必要な起動パラメータです。
ワーカーマンの設定はメモリ上に常駐しているため、通常時は監視し続けており、プログラムにバグが発生して終了した場合でも、ワーカーマンは自動的に新しいプロセスを作成して処理します。
本番環境で MQTT データを長時間監視および処理する必要がある場合は、systemctl などのコマンドを使用して管理することをお勧めします。
欠点
これまでのところ、サーバー上の MQTT メッセージをクライアントとして監視することは可能ですが、ここには欠点があります。実際のビジネス ロジックを処理するときに、このライブラリを単独で呼び出して、指定されたトピックにメッセージをパブリッシュします。
もう 1 つの点は、このライブラリを使用する場合、このライブラリを使用する 2 つの職人コマンドを同時に実行することはできないということです。次のプロンプトが表示されます:
➜ php artisan mqtt start Workerman[artisan] start in DEBUG mode Workerman[artisan] already running
ネットワーク全体を検索しましたこの問題が見つかりました。解決策があります。 Timer クラスを介してタイミング機能を追加したり、別の方法で解決することもできますが、効率が要求される場合、これは最適な解決策ではありません。他の解決策がある場合は、MQTT 関連ビジネスを処理するサーバーとして PHP を選択しないことをお勧めします。 。
プログラミング関連の知識について詳しくは、プログラミング教育をご覧ください。 !
以上がLaravel は Workerman コマンドラインとどのように連携して MQTT を監視しますかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

Laravelの電子メールの送信が失敗したときに戻りコードを取得する方法。 Laravelを使用してアプリケーションを開発する場合、検証コードを送信する必要がある状況に遭遇することがよくあります。そして実際には...
