搜尋
首頁後端開發php教程一文快速了解PHP專案中怎麼使用MQTT

一文快速了解PHP專案中怎麼使用MQTT

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);复制代码

訂閱訊息編寫程式碼訂閱

emqx/test

主題,並為該訂閱配置回呼函數以處理接收到的訊息,這裡我們將訂閱得到的主題和訊息印出來:
// 订阅
$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(
    &#39;protocol&#39; => &#39;tcp&#39;,
    &#39;date&#39; => date(&#39;Y-m-d H:i:s&#39;),
    &#39;url&#39; => &#39;https://github.com/emqx/MQTT-Client-Examples&#39;
  );
  $mqtt->publish(
    // topic
    &#39;emqx/test&#39;,
    // payload
    json_encode($payload),
    // qos
    0,
    // retain
    true
  );
  printf("msg $i send\n");
  sleep(1);
}

// 客户端轮询以处理传入消息和重发队列
$mqtt->loop(true);

一文快速了解PHP專案中怎麼使用MQTT完整程式碼

##伺服器連線、訊息發布與接收代碼。
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中文網其他相關文章!

陳述
本文轉載於:掘金社区。如有侵權,請聯絡admin@php.cn刪除
如何使PHP應用程序更快如何使PHP應用程序更快May 12, 2025 am 12:12 AM

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

PHP性能優化清單:立即提高速度PHP性能優化清單:立即提高速度May 12, 2025 am 12:07 AM

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

PHP依賴注入:提高代碼可檢驗性PHP依賴注入:提高代碼可檢驗性May 12, 2025 am 12:03 AM

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

PHP性能優化:數據庫查詢優化PHP性能優化:數據庫查詢優化May 12, 2025 am 12:02 AM

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

簡單指南:帶有PHP腳本的電子郵件發送簡單指南:帶有PHP腳本的電子郵件發送May 12, 2025 am 12:02 AM

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

PHP性能:識別和修復瓶頸PHP性能:識別和修復瓶頸May 11, 2025 am 12:13 AM

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

PHP的依賴注入:快速摘要PHP的依賴注入:快速摘要May 11, 2025 am 12:09 AM

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

提高PHP性能:緩存策略和技術提高PHP性能:緩存策略和技術May 11, 2025 am 12:08 AM

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

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

熱工具

MantisBT

MantisBT

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

SublimeText3 英文版

SublimeText3 英文版

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

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

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

DVWA

DVWA

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

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能