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 物聯網雲平臺 建立。伺服器接入資訊如下:
require('vendor/autoload.php'); use \PhpMqtt\Client\MqttClient;
設定 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;
使用上述的引數進行連線,通過 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( '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);
伺服器連線、訊息釋出與接收程式碼。
<?php require('vendor/autoload.php'); use \PhpMqtt\Client\MqttClient; use \PhpMqtt\Client\ConnectionSettings; $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 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專案中怎麼使用MQTT的詳細內容,更多請關注TW511.COM其它相關文章!