Maison  >  Article  >  développement back-end  >  Un article pour comprendre rapidement comment utiliser MQTT dans les projets PHP

Un article pour comprendre rapidement comment utiliser MQTT dans les projets PHP

青灯夜游
青灯夜游avant
2021-09-03 19:16:316403parcourir

Un article pour comprendre rapidement comment utiliser MQTT dans les projets PHP

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 服务器的连接、订阅、取消订阅、收发消息等功能。

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 avec la cible Fonctions du serveur MQTT

de connexion, d'abonnement, de désabonnement, d'envoi et de réception de messages, etc.

Sélection de la bibliothèque client 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

.

Pour plus de documentation sur l'utilisation de php-mqtt/client, veuillez vous référer à Packagiste php -mqtt/client.

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 :

Initialisation du projet

Confirmer la version PHP

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(
    &#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);

Utilisez Composer pour installer le client php-mqtt/client
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);

PHP 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.php

🎜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 PHP rand 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 via ConnectionSettings, 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer