PHP est un langage de script polyvalent open source largement utilisé qui peut être intégré au HTML et est particulièrement adapté au développement Web.
Cet article présente principalement comment utiliser la bibliothèque client php-mqtt/client
dans les projets PHP pour implémenter client MQTT php-mqtt/client
客户端库 ,实现 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 客户端库如下:
本项目使用 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 的一个依赖管理工具,它能管理你的 PHP 项目所需要的所有依赖关系。
composer require php-mqtt/client
本文将使用 EMQ X 提供的 免费公共 MQTT 服务器,该服务基于 EMQ X 的 MQTT 物联网云平台 创建。服务器接入信息如下:
require('vendor/autoload.php'); use \PhpMqtt\Client\MqttClient;
设置 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;
使用上述的参数进行连接,通过 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
avec la cible Fonctions du serveur MQTT
Cet article sélectionne la bibliothèque client php-mqtt/client
la plus téléchargée sur composer, plus Le client PHP-MQTT la bibliothèque peut être consultée sur Packagist - Rechercher MQTT
La communication MQTT est un scénario de communication réseau en dehors du système HTTP En raison des limitations des fonctionnalités PHP, l'utilisation d'extensions spécifiquement conçues pour la communication réseau telles que Swoole/Workerman dans le système PHP peut apporter une meilleure expérience. son utilisation. Les bibliothèques clientes MQTT pertinentes sont les suivantes :
:Client MQTT asynchrone pour PHP basé sur Worker.
Ce projet utilise 7.4.21 pour le développement et les tests. Les lecteurs peuvent utiliser la commande suivante pour confirmer la version PHP.
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);
Composer est un outil de gestion des dépendances pour PHP qui peut gérer toutes les dépendances requises par votre projet PHP.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);Copier après la connexionPHP MQTT utilise
🎜 pour se connecter au serveur MQTT🎜🎜🎜Cet article utilisera le 🎜public gratuit MQTT fourni par EMQ X Server 🎜, ce service est créé sur la base d'EMQ Les informations d'accès au serveur sont les suivantes : 🎜
- Courtier : 🎜broker-cn.emqx.io🎜
- Port TCP : 🎜1883🎜
- Port SSL/TLS : 🎜 8883🎜
🎜Importez le fichier de chargement automatique du compositeur et php-mqtt/client🎜
php pubsub_tcp.phpCopier après la connexion🎜Définissez les paramètres de connexion du courtier MQTT🎜
🎜Définissez l'adresse, le port et le sujet de connexion du courtier MQTT, et en même temps nous appelons la fonction PHPrand
pour générer aléatoirement le MQTT identifiant du client. 🎜rrreee🎜Écrire la fonction de connexion MQTT🎜
🎜Utilisez les paramètres ci-dessus pour vous connecter et définissez les paramètres de connexion viaConnectionSettings
, tels que 🎜 rrreee🎜Abonnez-vous aux messages🎜🎜🎜Écrivez le code pour vous abonner au sujet
emqx/test
et configurez une fonction de rappel pour l'abonnement afin de traiter les messages reçus . Ici, nous allons nous abonner Imprimer le sujet et le message obtenus : 🎜rrreee🎜Publier le message🎜🎜🎜Construire une charge utile et appeler la fonction
publier
pour emqx/test Le sujet publie des messages. Une fois la publication terminée, le client doit entrer dans l'état d'interrogation pour traiter les messages entrants et renvoyer la file d'attente : 🎜rrreee🎜🎜Code complet🎜🎜🎜Connexion au serveur, message. publier et recevoir du code. 🎜rrreee🎜🎜Test🎜🎜🎜Exécutez le code de publication des messages MQTT, nous verrons que le client s'est connecté avec succès, et que les messages ont été publiés un par un et reçus avec succès : 🎜rrreee🎜🎜🎜🎜🎜Résumé🎜🎜🎜À ce point, nous avons terminé l'utilisation de 🎜php-mqtt/client🎜 Le client se connecte au 🎜serveur public MQTT🎜, et implémente la connexion, la publication des messages et l'abonnement entre le client de test et le serveur MQTT. 🎜🎜🎜Lien original : https://www.emqx.com/zh/blog/how-to-use-mqtt-in-php🎜🎜Auteur : EMQ🎜Apprentissage recommandé : "Tutoriel vidéo PHP"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!