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

青灯夜游
發布: 2023-04-10 16:32:01
轉載
6450 人瀏覽過

一文快速了解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-mqtt/client### 用戶端連接到###公共MQTT伺服器###,並實現了測試客戶端與MQTT 伺服器的連線、訊息發布和訂閱。 #########原文連結:https://www.emqx.com/zh/blog/how-to-use-mqtt-in-php######作者:EMQ###

推薦學習:《PHP影片教學

以上是一文快速了解PHP專案中怎麼使用MQTT的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:juejin.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板