一文快速瞭解PHP專案中怎麼使用MQTT
是一種被廣泛應用的開放原始碼的多用途指令碼語言,它可嵌入到 HTML 中,尤其適合 Web 開發。
本文主要介紹如何在 PHP 專案中使用 php-mqtt/client
客戶端庫 ,實現 與 的連線、訂閱、取消訂閱、收發訊息等功能。
MQTT 客戶端庫選擇
本文選擇了 composer 上下載量最高的 php-mqtt/client
這個客戶端庫,更多 PHP-MQTT 客戶端庫可以在 中檢視。
有關 php-mqtt/client 更多使用文件請參閱 。
MQTT 通訊屬於 HTTP 體系之外的網路通訊場景,由於 PHP 特性限制,使用 PHP 體系中的 Swoole/Workerman 等專為網路通訊打造的擴充可以帶來更好的體驗,其使用本文不再贅述,相關的 MQTT 客戶端庫如下:
- :Asynchronous MQTT client for PHP based on workerman.
- :MQTT Protocol Analysis and Coroutine Client for PHP.
專案初始化
確認 PHP 版本
本專案使用 7.4.21 進行開發測試,讀者可用如下命令確認 PHP 的版本。
php --version PHP 7.4.21 (cli) (built: Jul 12 2021 11:52:30) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.21, Copyright (c), by Zend Technologies
使用 Composer 安裝 php-mqtt/client 客戶端
Composer 是 PHP 的一個依賴管理工具,它能管理你的 PHP 專案所需要的所有依賴關係。
composer require php-mqtt/client
PHP MQTT 使用
連線 MQTT 伺服器
本文將使用 EMQ X 提供的 ,該服務基於 EMQ X 的 建立。伺服器接入資訊如下:
- Broker: broker-cn.emqx.io
- TCP Port: 1883
- SSL/TLS Port: 8883
匯入 composer autoload 檔案和 php-mqtt/client
require('vendor/autoload.php'); use PhpMqttClientMqttClient;
設定 MQTT Broker 連線引數
設定 MQTT Broker 連線地址,埠以及 topic,同時我們呼叫 PHP rand
函式隨機生成 MQTT 客戶端 id。
$server = 'broker-cn.emqx.io'; $port = 1883; $clientId = rand(5, 15); $username = 'emqx_user'; $password = null; $clean_session = false;
編寫 MQTT 連線函式
使用上述的引數進行連線,透過 ConnectionSettings
設定連線引數,比如
$connectionSettings = new ConnectionSettings();$connectionSettings ->setUsername($username) ->setPassword(null) ->setKeepAliveInterval(60) // Last Will 設定 ->setLastWillTopic('emqx/test/last-will') ->setLastWillMessage('client disconnect') ->setLastWillQualityOfService(1);複製程式碼
訂閱訊息
編寫程式碼訂閱 emqx/test
主題,併為該訂閱配置回撥函式以處理接收到的訊息,此處我們將訂閱得到的主題和訊息列印出來:
// 訂閱 $mqtt->subscribe('emqx/test', function ($topic, $message) { printf("Received message on topic [%s]: %sn", $topic, $message); }, 0);
釋出訊息
構造一個 payload,呼叫 publish
函式向 emqx/test
主題釋出訊息,釋出完成之後客戶端需要進入輪詢狀態,處理傳入的訊息和重發佇列:
for ($i = 0; $i< 10; $i++) { $payload = array( 'protocol' => 'tcp', 'date' => date('Y-m-d H:i:s'), 'url' => '' ); $mqtt->publish( // topic 'emqx/test', // payload json_encode($payload), // qos 0, // retain true ); printf("msg $i sendn"); sleep(1); } // 客戶端輪詢以處理傳入訊息和重發佇列 $mqtt->loop(true);
完整程式碼
伺服器連線、訊息釋出與接收程式碼。
<?php require('vendor/autoload.php'); use PhpMqttClientMqttClient; use PhpMqttClientConnectionSettings; $server = 'broker.emqx.io'; $port = 1883; $clientId = rand(5, 15); $username = 'emqx_user'; $password = null; $clean_session = false; $connectionSettings = new ConnectionSettings(); $connectionSettings ->setUsername($username) ->setPassword(null) ->setKeepAliveInterval(60) // Last Will 設定 ->setLastWillTopic('emqx/test/last-will') ->setLastWillMessage('client disconnect') ->setLastWillQualityOfService(1); $mqtt = new MqttClient($server, $port, $clientId); $mqtt->connect($connectionSettings, $clean_session); printf("client connectedn"); $mqtt->subscribe('emqx/test', function ($topic, $message) { printf("Received message on topic [%s]: %sn", $topic, $message); }, 0); for ($i = 0; $i< 10; $i++) { $payload = array( 'protocol' => 'tcp', 'date' => date('Y-m-d H:i:s'), 'url' => '' ); $mqtt->publish( // topic 'emqx/test', // payload json_encode($payload), // qos 0, // retain true ); printf("msg $i sendn"); sleep(1); } $mqtt->loop(true);
測試
執行 MQTT 訊息釋出程式碼,我們將看到客戶端已經成功連線,且訊息已經逐條釋出並接收成功:
php pubsub_tcp.php
總結
至此,我們完成了使用 php-mqtt/client 客戶端連線到,並實現了測試客戶端與 MQTT 伺服器的連線、訊息釋出和訂閱。
原文連結:https://www.emqx.com/zh/blog/how-to-use-mqtt-in-php
作者:EMQ
推薦學習:《》
以上就是一文快速瞭解PHP專案中怎麼使用MQTT的詳細內容,更多請關注php中文網其它相關文章!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1868/viewspace-2827195/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何在 PHP 專案中使用 MQTTPHPMQQT
- 一文快速瞭解Java集合框架Java框架
- 快速上手php:使用PhpStrom部署專案PHP
- 共享WiFi專案盈利如何?一文帶你瞭解WiFi
- 在 Flutter 專案中使用 MQTTFlutterMQQT
- 如何在 Flask 專案中使用 MQTTFlaskMQQT
- 如何在Angular專案中使用MQTTAngularMQQT
- 如何在 Django 專案中使用 MQTTDjangoMQQT
- 【PHP】Largon 快速部署 Laravel 專案PHPGoLaravel
- 如何在 Node.js 專案中使用 MQTTNode.jsMQQT
- 如何在 React Native 專案中使用 MQTTReact NativeMQQT
- PHP怎麼使用命令列生成檔案?PHP命令列
- 一文快速瞭解開源表單快速開發的多個優勢
- 軟體專案中,需求怎麼做?
- 專案中快速搭建Retrofit
- 快速瞭解jQueryjQuery
- 一文看懂:工程專案管理軟體有哪些?怎麼選?專案管理
- 一篇瞭解怎麼使用爬蟲代理IP爬蟲
- ? 一文帶你瞭解多檔案混淆加密加密
- RedHat 技術棧都有哪些,一文快速瞭解雲服務Redhat
- excel檔案怎麼使用php進行處理ExcelPHP
- 一文帶你瞭解什麼是工控機?
- 在專案中怎麼靈活使用Dagger? | 掘金技術徵文
- 快速瞭解VUE中的編譯作用域Vue編譯
- 專案組合管理流程要點,一文快速掌握
- ? 使用 Dawn 快速搭建 React 專案!React
- PHP專案中composer和Git的組合使用PHPGit
- 一文帶你瞭解python中的多型Python多型
- MQTT 快速入門MQQT
- 專案中 vscode 外掛擴充套件失效怎麼解決VSCode套件
- 騰訊遊戲學院專家帶你快速瞭解PBR遊戲
- 免構建安裝 nginx php-fpm 快速執行 php 專案NginxPHP
- 快速瞭解什麼是自然語言處理自然語言處理
- Objc Runtime在專案中該怎麼用OBJ
- 怎麼使用pipenv管理你的python專案Python
- 微火資訊:共享WiFi專案是什麼,如何盈利你瞭解多少?WiFi
- 使用 Terraform 在 AWS 上快速部署 MQTT 叢集ORMMQQT
- 使用maven2快速建立專案Maven