PHP 是一種被廣泛應用的開放原始碼的多用途腳本語言,它可嵌入到 HTML 中,尤其適合 Web 開發。
本文主要介紹如何在PHP 專案中使用php-mqtt/client
用戶端程式庫,實作MQTT 用戶端與MQTT 伺服器的連線、訂閱、取消訂閱、收發訊息等功能。
MQTT 用戶端庫選擇
本文選擇了composer 下載量最高的php-mqtt/client
這個客戶端庫,更多PHP-MQTT 用戶端程式庫可以在Packagist - Search MQTT 中查看。
有關 php-mqtt/client 更多使用文件請參閱 Packagist php-mqtt/client。
MQTT 通訊屬於HTTP 體係以外的網路通訊場景,由於PHP 特性限制,使用PHP 體系中的Swoole/Workerman 等專為網路通訊打造的拓展可以帶來更好的體驗,其使用本文不再贅述,相關的MQTT 用戶端程式庫如下:
- workerman/mqtt:Asynchronous MQTT client for PHP based on workerman.
- simps /mqtt: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 提供的免費公共MQTT伺服器,該服務基於EMQ X 的MQTT 物聯網雲端平台 建立。伺服器存取資訊如下:
- Broker: broker-cn.emqx.io
- TCP Port: 1883
##SSL/TLS Port:
8883
導入composer autoload 檔案與php-mqtt/client
require('vendor/autoload.php'); use \PhpMqtt\Client\MqttClient;
設定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);复制代码
訂閱訊息
編寫程式碼訂閱
主題,並為該訂閱配置回呼函數以處理接收到的訊息,這裡我們將訂閱得到的主題和訊息印出來:// 订阅
$mqtt->subscribe('emqx/test', function ($topic, $message) {
printf("Received message on topic [%s]: %s\n", $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' => 'https://github.com/emqx/MQTT-Client-Examples' ); $mqtt->publish( // topic 'emqx/test', // payload json_encode($payload), // qos 0, // retain true ); printf("msg $i send\n"); sleep(1); } // 客户端轮询以处理传入消息和重发队列 $mqtt->loop(true);
完整程式碼
##伺服器連線、訊息發布與接收代碼。 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 connected\n");
$mqtt->subscribe('emqx/test', function ($topic, $message) {
printf("Received message on topic [%s]: %s\n", $topic, $message);
}, 0);
for ($i = 0; $i< 10; $i++) {
$payload = array(
'protocol' => 'tcp',
'date' => date('Y-m-d H:i:s'),
'url' => 'https://github.com/emqx/MQTT-Client-Examples'
);
$mqtt->publish(
// topic
'emqx/test',
// payload
json_encode($payload),
// qos
0,
// retain
true
);
printf("msg $i send\n");
sleep(1);
}
$mqtt->loop(true);
測試運行MQTT 訊息發布程式碼,我們將看到客戶端已經成功連接,且訊息已經逐條發布並接收成功:php pubsub_tcp.php
總結###至此,我們完成了使用###php-mqtt/client### 用戶端連接到###公共MQTT伺服器###,並實現了測試客戶端與MQTT 伺服器的連線、訊息發布和訂閱。 #########原文連結:https://www.emqx.com/zh/blog/how-to-use-mqtt-in-php######作者:EMQ###
推薦學習:《PHP影片教學》
以上是一文快速了解PHP專案中怎麼使用MQTT的詳細內容。更多資訊請關注PHP中文網其他相關文章!

tomakephpapplicationsfaster,關注台詞:1)useopcodeCachingLikeLikeLikeLikeLikePachetoStorePreciledScompiledScriptbyTecode.2)MinimimiedAtabaseSqueriSegrieSqueriSegeriSybysequeryCachingandeffeftExting.3)Leveragephp7 leveragephp7 leveragephp7 leveragephpphp7功能forbettercodeefficy.4)

到ImprovephPapplicationspeed,關注台詞:1)啟用opcodeCachingwithapCutoredUcescriptexecutiontime.2)實現databasequerycachingingusingpdotominiminimizedatabasehits.3)usehttp/2tomultiplexrequlexrequestsandreduceconnection.4 limitesclection.4.4

依赖注入(DI)通过显式传递依赖关系,显著提升了PHP代码的可测试性。1)DI解耦类与具体实现,使测试和维护更灵活。2)三种类型中,构造函数注入明确表达依赖,保持状态一致。3)使用DI容器管理复杂依赖,提升代码质量和开发效率。

DatabasequeryoptimizationinPHPinvolvesseveralstrategiestoenhanceperformance.1)Selectonlynecessarycolumnstoreducedatatransfer.2)Useindexingtospeedupdataretrieval.3)Implementquerycachingtostoreresultsoffrequentqueries.4)Utilizepreparedstatementsforeffi

phpisusedforsenderemailsduetoitsbuilt-inmail()函數andsupportivelibrariesLikePhpMailerAndSwiftMailer.1)usethemail()functionForbasiceMails,butithasimails.2)butithasimail.2)

PHP性能瓶颈可以通过以下步骤解决:1)使用Xdebug或Blackfire进行性能分析,找出问题所在;2)优化数据库查询并使用缓存,如APCu;3)使用array_filter等高效函数优化数组操作;4)配置OPcache进行字节码缓存;5)优化前端,如减少HTTP请求和优化图片;6)持续监控和优化性能。通过这些方法,可以显著提升PHP应用的性能。

依賴性注射(DI)InphpisadesignPatternthatManages和ReducesClassDeptions,增強量強制性,可驗證性和MATIALWINABIOS.ItallowSpasspassingDepentenciesLikEdenciesLikedAbaseConnectionStoclasseconnectionStoclasseSasasasasareTers,interitationAseTestingEaseTestingEaseTestingEaseTestingEasingAndScalability。

cachingimprovesphpermenceByStorcyResultSofComputationsorqucrouctationsorquctationsorquickretrieval,reducingServerLoadAndenHancingResponsetimes.feftectivestrategiesinclude:1)opcodecaching,whereStoresCompiledSinmememorytssinmemorytoskipcompliation; 2)datacaching datacachingsingMemccachingmcachingmcachings


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能