PHP 是一種被廣泛應用的開放原始碼的多用途腳本語言,它可嵌入到 HTML 中,尤其適合 Web 開發。
本文主要介紹如何在PHP 專案中使用php-mqtt/client
用戶端程式庫,實作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 用戶端程式庫如下:
本項目使用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 的一個依賴管理工具,它能管理你的PHP 專案所需的所有依賴關係。
composer require php-mqtt/client
本文將使用EMQ X 提供的免費公共MQTT伺服器,該服務基於EMQ X 的MQTT 物聯網雲端平台 建立。伺服器存取資訊如下:
8883
require('vendor/autoload.php'); use \PhpMqtt\Client\MqttClient;
設定MQTT Broker 連線參數
$server = 'broker-cn.emqx.io'; $port = 1883; $clientId = rand(5, 15); $username = 'emqx_user'; $password = null; $clean_session = false;
編寫MQTT 連接函數
$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);
主題發布訊息,發布完成之後客戶端需要進入輪詢狀態,處理傳入的訊息和重發佇列:
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影片教學》 以上是一文快速了解PHP專案中怎麼使用MQTT的詳細內容。更多資訊請關注PHP中文網其他相關文章!php pubsub_tcp.php
總結###至此,我們完成了使用###php-mqtt/client### 用戶端連接到###公共MQTT伺服器###,並實現了測試客戶端與MQTT 伺服器的連線、訊息發布和訂閱。 #########原文連結:https://www.emqx.com/zh/blog/how-to-use-mqtt-in-php######作者:EMQ###