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.
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:
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
Komposer ialah alat pengurusan pergantungan untuk PHP yang boleh menguruskan perkara yang diperlukan oleh projek PHP anda Semua kebergantungan .
composer require php-mqtt/client
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:
require('vendor/autoload.php'); use \PhpMqtt\Client\MqttClient;
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;
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);复制代码
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);
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( '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);
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);
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
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!