91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP項目中MQTT的使用方法

發布時間:2021-09-04 13:57:47 來源:億速云 閱讀:219 作者:chen 欄目:編程語言

這篇文章主要介紹“PHP項目中MQTT的使用方法”,在日常操作中,相信很多人在PHP項目中MQTT的使用方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”PHP項目中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(
    '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的使用方法

到此,關于“PHP項目中MQTT的使用方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

尼木县| 拉孜县| 尤溪县| 财经| 鱼台县| 文化| 临猗县| 四子王旗| 阳高县| 卢龙县| 和静县| 荔浦县| 克山县| 刚察县| 婺源县| 辽宁省| 江川县| 茌平县| 舟曲县| 翁源县| 多伦县| 乐陵市| 保山市| 古交市| 南溪县| 神木县| 集安市| 太仓市| 建瓯市| 靖西县| 宁南县| 曲水县| 岗巴县| 拉萨市| 钟山县| 洛阳市| 宁都县| 阿城市| 彰化县| 焦作市| 广灵县|