Langganan dan penerbitan mesej praktikal MQTT dalam pembangunan PHP
Pengenalan:
Dengan pembangunan Internet of Things, Protokol Pengangkutan Telemetri Beratur Mesej (MQTT) memainkan peranan penting dalam komunikasi antara peranti penderia dan aplikasi bahagian belakang. Sebagai protokol ringan, MQTT mempunyai ciri penggunaan tenaga yang rendah, kebolehpercayaan yang tinggi dan kebolehskalaan. Dalam pembangunan PHP, MQTT digunakan untuk melanggan dan menerbitkan mesej, yang boleh berkomunikasi dengan mudah dengan peranti sensor dan menghantar data ke aplikasi back-end untuk pemprosesan dan paparan. Artikel ini akan memperkenalkan aplikasi praktikal MQTT dalam pembangunan PHP dan menyediakan contoh kod yang berkaitan.
1. Pengenalan kepada MQTT:
MQTT ialah protokol penghantaran baris gilir mesej berdasarkan model terbitkan/langgan. Ia menggunakan format mesej binari yang ringan dan sesuai untuk pelbagai peranti perkakasan seperti penderia dan sistem terbenam. Protokol MQTT terutamanya mengandungi dua peranan: penerbit mesej dan pelanggan mesej. Penerbit menerbitkan mesej kepada topik tertentu, manakala pelanggan melanggan topik yang diminati untuk menerima mesej yang berkaitan. Protokol MQTT juga menyokong tetapan tahap QoS (Kualiti Perkhidmatan) mesej untuk memastikan kebolehpercayaan data.
2. Pasang pelayan MQTT:
Sebelum mula mempraktikkan MQTT dalam pembangunan PHP, kita perlu membina pelayan MQTT terlebih dahulu. Berikut ialah langkah ringkas untuk menyediakan pelayan MQTT:
3. Menggunakan MQTT dalam PHP:
Proses menggunakan MQTT untuk langganan dan penerbitan mesej dalam PHP adalah seperti berikut:
Memperkenalkan perpustakaan pelanggan MQTT:
Mula-mula anda perlu memperkenalkan perpustakaan pelanggan MQTT, yang biasa digunakan. klien MQTT terpakai dalam PHP Perpustakaan terminal termasuk phpMQTT dan mosquitto-php, dsb. Artikel ini mengambil phpMQTT sebagai contoh, yang boleh dipasang melalui komposer:
composer require bluerhinos/phpmqttclient
Konfigurasi klien MQTT:
Sebelum melaksanakan operasi MQTT dalam kod PHP, anda perlu mengkonfigurasi sambungan terlebih dahulu, termasuk alamat pelayan, nombor port, tahap QoS , dsb. Berikut ialah contoh konfigurasi:
$mqttServer = 'localhost'; // MQTT服务器地址 $mqttPort = 1883; // MQTT服务器端口 $mqttClientId = 'php_script'; // 客户端ID $mqttUsername = ''; //用户名 $mqttPassword = ''; // 密码
Langganan mesej MQTT:
Untuk melanggan topik dalam PHP, anda boleh menggunakan kaedah langgan
. Berikut ialah contoh: subscribe
方法。以下是一个示例:
require('phpMQTT.php'); $mqtt = new phpMQTT($mqttServer, $mqttPort, $mqttClientId); if($mqtt->connect(true, NULL, $mqttUsername, $mqttPassword)) { $topics['topic_name'] = array('qos' => 0, 'function' => 'dataCallback'); $mqtt->subscribe($topics, 0); while($mqtt->proc()){ } $mqtt->close(); } else { echo "连接MQTT服务器失败!"; exit(1); } function dataCallback($topic, $payload) { echo "收到消息:$payload"; }
MQTT消息的发布:
在PHP中发布一个消息,可以使用publish
方法。以下是一个示例:
require('phpMQTT.php'); $mqtt = new phpMQTT($mqttServer, $mqttPort, $mqttClientId); if($mqtt->connect(true, NULL, $mqttUsername, $mqttPassword)) { $mqtt->publish('topic_name', '消息内容', 0); $mqtt->close(); } else { echo "连接MQTT服务器失败!"; exit(1); }
四、实战应用:
下面以一个简单的实景应用为例,演示在PHP中使用MQTT进行消息订阅与发布的实际应用。
temperature
require('phpMQTT.php'); $mqttServer = 'localhost'; // MQTT服务器地址 $mqttPort = 1883; // MQTT服务器端口 $mqttClientId = 'php_script'; // 客户端ID $mqtt = new phpMQTT($mqttServer, $mqttPort, $mqttClientId); if($mqtt->connect(true, NULL, NULL, NULL)) { $topics['temperature'] = array('qos' => 0, 'function' => 'temperatureCallback'); $mqtt->subscribe($topics, 0); echo "开始订阅温度数据... "; while($mqtt->proc()){ } $mqtt->close(); } else { echo "连接MQTT服务器失败!"; exit(1); } function temperatureCallback($topic, $payload) { echo "收到温度消息:$payload "; // 在这里进行温度数据的处理,如存储到数据库或展示在Web界面上 }
publish
. Berikut ialah contoh: <!DOCTYPE html> <html> <head> <title>温度监控</title> </head> <body> <h1>温度监控</h1> <div id="temperature"></div> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script> $(document).ready(function() { var mqttServer = 'mqtt://localhost:1883'; var clientId = 'web_client'; var temperatureTopic = 'temperature'; var client = mqtt.connect(mqttServer, { clientId: clientId }); client.on('connect', function() { client.subscribe(temperatureTopic); }); client.on('message', function(topic, message) { if (topic === temperatureTopic) { var temperature = message.toString(); $('#temperature').text('当前温度:' + temperature + '℃'); } }); }); </script> </body> </html>
Andaikan kami mempunyai peranti penderia suhu yang menerbitkan suhu masa nyata melalui protokol MQTT ke saluran dengan topik
Atas ialah kandungan terperinci Langganan mesej MQTT dan amalan penerbitan dalam pembangunan PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!