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.という 1 行だけです。
新しい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 Send SUBSCRIBE package, topic:/iot/# message_id:1 <p>忘れないように注意してください。次の <strong>start</strong> は、workerman 自体に必要な起動パラメータです。 </p><p>ワーカーマンの設定はメモリ上に常駐しているため、通常時は監視し続けており、プログラムにバグが発生して終了した場合でも、ワーカーマンは自動的に新しいプロセスを作成して処理します。 </p><p>本番環境で MQTT データを長時間監視および処理する必要がある場合は、systemctl などのコマンドを使用して管理することをお勧めします。 </p><h2 id="strong-欠点-strong"><strong>欠点</strong></h2><p>これまでのところ、サーバー上の MQTT メッセージをクライアントとして監視することは可能ですが、ここには欠点があります。実際のビジネス ロジックを処理するときに、このライブラリを単独で呼び出して、指定されたトピックにメッセージをパブリッシュします。 </p><p>もう 1 つの点は、このライブラリを使用する場合、このライブラリを使用する 2 つの職人コマンドを同時に実行することはできないということです。次のプロンプトが表示されます: </p><pre class="brush:php;toolbar:false">➜ php artisan mqtt start Workerman[artisan] start in DEBUG mode Workerman[artisan] already running
ネットワーク全体を検索しましたこの問題が見つかりました。解決策があります。 Timer クラスを介してタイミング機能を追加したり、別の方法で解決することもできますが、効率が要求される場合、これは最適な解決策ではありません。他の解決策がある場合は、MQTT 関連ビジネスを処理するサーバーとして PHP を選択しないことをお勧めします。 。
プログラミング関連の知識について詳しくは、プログラミング教育をご覧ください。 !
以上がLaravel は Workerman コマンドラインとどのように連携して MQTT を監視しますかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

WorkermanのWebSocketクライアントは、非同期通信、高性能、スケーラビリティ、セキュリティなどの機能とのリアルタイム通信を強化し、既存のシステムと簡単に統合します。

この記事では、リアルタイムのコラボレーションツールを構築するために、高性能PHPサーバーであるWorkermanを使用して説明します。インストール、サーバーのセットアップ、リアルタイム機能の実装、既存のシステムとの統合をカバーし、Workermanのキーfを強調します

この記事では、非同期プログラミング、ネットワーク構成、リソース管理、データ転送の最小化、負荷分散、定期的な更新に焦点を当てた低遅延アプリケーションのWorkermanの最適化について説明します。

この記事では、WorkermanとMySQLを使用したリアルタイムデータ同期の実装、セットアップ、ベストプラクティス、データの一貫性の確保、一般的な課題への対処に焦点を当てています。

この記事では、Swaremanをサーバーレスアーキテクチャに統合し、スケーラビリティ、ステートレス性、コールドスタート、リソース管理、統合の複雑さに焦点を当てています。 Workermanは、高い並行性を通じてパフォーマンスを向上させ、Cold STAを減らします

この記事では、Workermanを使用して高性能のeコマースプラットフォームの構築について説明し、Websocketのサポートやスケーラビリティなどの機能に焦点を当て、リアルタイムの相互作用と効率を向上させます。

WorkermanのWebSocketサーバーは、一般的な脅威に対するスケーラビリティ、低レイテンシ、セキュリティ対策などの機能とのリアルタイム通信を強化します。

この記事では、高性能PHPサーバーであるWorkermanを使用して、リアルタイム分析ダッシュボードを構築することについて説明します。これは、React、Vue.JS、Angularなどのフレームワークとのインストール、サーバーのセットアップ、データ処理、フロントエンドの統合をカバーしています。キーfeatur


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

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