Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Satu artikel untuk memahami dengan cepat cara menggunakan MQTT dalam projek PHP

Satu artikel untuk memahami dengan cepat cara menggunakan MQTT dalam projek PHP

青灯夜游
青灯夜游ke hadapan
2021-09-03 19:16:316454semak imbas

Satu artikel untuk memahami dengan cepat cara menggunakan MQTT dalam projek PHP

PHP ialah bahasa skrip pelbagai guna sumber terbuka yang digunakan secara meluas yang boleh dibenamkan dalam HTML dan amat sesuai untuk pembangunan web.

Artikel ini terutamanya memperkenalkan cara menggunakan pustaka klien php-mqtt/client dalam projek PHP untuk merealisasikan sambungan, langganan dan pembatalan klien MQTT dan MQTT pelayan Langganan, menghantar dan menerima mesej serta fungsi lain.

Pemilihan perpustakaan klien MQTT

Artikel ini memilih pustaka klien php-mqtt/client yang paling banyak dimuat turun pada komposer Lebih banyak perpustakaan klien PHP-MQTT boleh didapati di Lihat dalam Packagist - Cari MQTT.

Untuk lebih banyak dokumentasi penggunaan php-mqtt/client, sila rujuk Packagist php-mqtt/client.

Komunikasi MQTT ialah senario komunikasi rangkaian di luar sistem HTTP Disebabkan oleh pengehadan ciri PHP, menggunakan Swoole/Workerman dan sambungan lain yang direka khusus untuk komunikasi rangkaian dalam sistem PHP boleh membawa pengalaman yang lebih baik pergi ke butiran, perpustakaan pelanggan MQTT yang berkaitan adalah seperti berikut:

  • workerman/mqtt: Asynchronous MQTT client untuk PHP berdasarkan workerman.
  • simps /mqtt:Analisis Protokol MQTT dan Klien Coroutine untuk PHP.

Pemulaan projek

Sahkan versi PHP

Projek ini menggunakan 7.4.21 untuk pembangunan dan ujian Pembaca boleh menggunakan arahan berikut untuk mengesahkan versi 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

Gunakan Komposer untuk memasang klien php-mqtt/klien

Komposer ialah alat pengurusan pergantungan untuk PHP yang boleh menguruskan perkara yang diperlukan oleh projek PHP anda Semua kebergantungan .

composer require php-mqtt/client

PHP MQTT menggunakan

untuk menyambung ke pelayan MQTT

Artikel ini akan menggunakan percuma disediakan oleh pelayan EMQ X Public MQTT , perkhidmatan ini dicipta berdasarkan platform awan MQTT IoT MQTT EMQ X. Maklumat akses pelayan adalah seperti berikut:

  • Broker: broker-cn.emqx.io
  • Port TCP: 1883
  • SSL/TLS Port: 8883

Import fail autoload komposer dan php-mqtt/client

require('vendor/autoload.php');

use \PhpMqtt\Client\MqttClient;

Tetapkan parameter sambungan MQTT Broker

Tetapkan alamat sambungan Broker MQTT, port dan topik, dan pada masa yang sama kami memanggil fungsi PHP rand untuk menjana id klien MQTT secara rawak.

$server   = 'broker-cn.emqx.io';
$port     = 1883;
$clientId = rand(5, 15);
$username = 'emqx_user';
$password = null;
$clean_session = false;

Tulis fungsi sambungan MQTT

Gunakan parameter di atas untuk menyambung, tetapkan parameter sambungan melalui ConnectionSettings, seperti

$connectionSettings  = new ConnectionSettings();$connectionSettings
  ->setUsername($username)
  ->setPassword(null)
  ->setKeepAliveInterval(60)  // Last Will 设置
  ->setLastWillTopic('emqx/test/last-will')
  ->setLastWillMessage('client disconnect')
  ->setLastWillQualityOfService(1);复制代码

Langgan mesej

Tulis kod untuk melanggan topik emqx/test dan konfigurasikan fungsi panggil balik untuk langganan memproses mesej yang diterima Di sini kami mencetak topik dan mesej diperoleh melalui langganan:

// 订阅
$mqtt->subscribe('emqx/test', function ($topic, $message) {
    printf("Received message on topic [%s]: %s\n", $topic, $message);
}, 0);

Terbitkan mesej

Bina muatan dan panggil fungsi publish untuk menerbitkan mesej kepada topik emqx/test. Selepas penerbitan selesai, pelanggan perlu memasuki keadaan pengundian. Mengendalikan mesej masuk dan menghantar semula baris gilir:

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);

Kod lengkap

Sambungan pelayan, penerbitan mesej dan menerima kod.

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);

Ujian

Jalankan kod penerbitan mesej MQTT, kami akan melihat bahawa pelanggan telah berjaya menyambung, dan mesej telah diterbitkan satu demi satu dan diterima berjaya:

php pubsub_tcp.php

Satu artikel untuk memahami dengan cepat cara menggunakan MQTT dalam projek PHP

Ringkasan

Pada ketika ini, kami telah selesai menggunakan php-mqtt/client klien untuk disambungkan kePelayan MQTT awam, dan melaksanakan sambungan, penerbitan mesej dan langganan antara klien ujian dan pelayan MQTT.

Pautan asal: https://www.emqx.com/zh/blog/how-to-use-mqtt-in-php

Pengarang: EMQ

Pembelajaran yang disyorkan: "Tutorial Video PHP"

Atas ialah kandungan terperinci Satu artikel untuk memahami dengan cepat cara menggunakan MQTT dalam projek PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:juejin.cn. Jika ada pelanggaran, sila hubungi admin@php.cn Padam