Ein Artikel, um schnell zu verstehen, wie man MQTT in PHP-Projekten verwendet

青灯夜游
Freigeben: 2023-04-10 16:32:01
nach vorne
6450 Leute haben es durchsucht

Ein Artikel, um schnell zu verstehen, wie man MQTT in PHP-Projekten verwendet

PHP ist eine weit verbreitete Open-Source-Mehrzweck-Skriptsprache, die in HTML eingebettet werden kann und sich besonders für die Webentwicklung eignet.

In diesem Artikel wird hauptsächlich die Verwendung der php-mqtt/client-Clientbibliothek in PHP-Projekten zur Implementierung von MQTT-Client 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
Nach dem Login kopieren

使用 Composer 安装 php-mqtt/client 客户端

Composer 是 PHP 的一个依赖管理工具,它能管理你的 PHP 项目所需要的所有依赖关系。

composer require php-mqtt/client
Nach dem Login kopieren

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;
Nach dem Login kopieren

设置 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;
Nach dem Login kopieren

编写 MQTT 连接函数

使用上述的参数进行连接,通过 ConnectionSettings 设置连接参数,比如

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

订阅消息

编写代码订阅 emqx/test 主题,并为该订阅配置回调函数以处理接收到的消息,此处我们将订阅得到的主题和消息打印出来:

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

发布消息

构造一个 payload,调用 publish 函数向 emqx/test mit Funktionen des MQTT-Servers

zum Verbinden, Abonnieren, Abmelden, Senden und Empfangen von Nachrichten usw.

MQTT-Client-Bibliotheksauswahl

In diesem Artikel werden die am häufigsten heruntergeladenen php-mqtt/client-Client-Bibliotheken auf Composer ausgewählt, außerdem der PHP-MQTT-Client Die Bibliothek kann unter Packagist – Search MQTT

eingesehen werden.

Weitere Nutzungsdokumentation zu php-mqtt/client finden Sie unter Packagist php -mqtt/client.

MQTT-Kommunikation ist ein Netzwerkkommunikationsszenario außerhalb des HTTP-Systems. Aufgrund der Einschränkungen der PHP-Funktionen kann die Verwendung von Erweiterungen, die speziell für die Netzwerkkommunikation entwickelt wurden, wie Swoole/Workerman, zu einem besseren Erlebnis führen seine Verwendung. Die relevanten MQTT-Client-Bibliotheken sind wie folgt:

Projektinitialisierung

PHP-Version bestätigen

Dieses Projekt verwendet 7.4.21 für Entwicklung und Tests. Leser können den folgenden Befehl verwenden, um die PHP-Version zu bestätigen.

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);
Nach dem Login kopieren

Verwenden Sie Composer, um den PHP-MQTT/Client-Client zu installieren

Composer ist ein Abhängigkeitsverwaltungstool für PHP, das alle für Ihr PHP-Projekt erforderlichen Abhängigkeiten verwalten kann.

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);
Nach dem Login kopieren

PHP MQTT verwendet

🎜, um eine Verbindung zum MQTT-Server herzustellen🎜🎜🎜In diesem Artikel wird die 🎜freie Öffentlichkeit verwendet MQTT wird von EMQ X Server 🎜 bereitgestellt. Dieser Dienst basiert auf EMQ Die Serverzugriffsinformationen lauten wie folgt: 🎜
  • Broker: 🎜broker-cn.emqx.io🎜
  • TCP-Port: 🎜1883🎜
  • SSL/TLS-Port : 🎜 8883🎜

🎜Composer-Autoload-Datei und PHP-MQTT/Client importieren🎜

php pubsub_tcp.php
Nach dem Login kopieren

🎜Legen Sie die MQTT-Broker-Verbindungsparameter fest🎜

🎜Legen Sie die MQTT-Broker-Verbindungsadresse, den Port und das Thema fest und rufen Sie gleichzeitig die PHP-Funktion rand auf, um das MQTT zufällig zu generieren Kunden-ID. 🎜rrreee

🎜MQTT-Verbindungsfunktion schreiben🎜

🎜Verwenden Sie die oben genannten Parameter, um eine Verbindung herzustellen, und legen Sie die Verbindungsparameter über ConnectionSettings fest, z. B. 🎜 rrreee

🎜Nachrichten abonnieren🎜🎜🎜Schreiben Sie Code, um das Thema emqx/test zu abonnieren, und konfigurieren Sie eine Rückruffunktion für das Abonnement, um die empfangenen Nachrichten zu verarbeiten . Hier abonnieren wir das erhaltene Thema und die Nachricht: 🎜rrreee

🎜Veröffentlichen Sie die Nachricht🎜🎜🎜Erstellen Sie eine Nutzlast und rufen Sie die Funktion publish auf code>emqx/test Das Thema veröffentlicht Nachrichten. Nachdem die Veröffentlichung abgeschlossen ist, muss der Client in den Abfragestatus wechseln, um eingehende Nachrichten zu verarbeiten und die Warteschlange erneut zu senden: 🎜rrreee🎜🎜Vollständiger Code🎜🎜🎜Serververbindung, Nachricht Code veröffentlichen und empfangen. 🎜rrreee🎜🎜Testen🎜🎜🎜Führen Sie den MQTT-Nachrichtenveröffentlichungscode aus. Wir werden sehen, dass der Client erfolgreich eine Verbindung hergestellt hat und die Nachrichten einzeln veröffentlicht und erfolgreich empfangen wurden: 🎜rrreee🎜🎜🎜🎜🎜Zusammenfassung🎜🎜🎜At Zu diesem Zeitpunkt haben wir die Verwendung von 🎜php-mqtt/client🎜 abgeschlossen. Der Client stellt eine Verbindung zum 🎜öffentlichen MQTT-Server🎜 her und implementiert die Verbindung des Testclients zum MQTT-Server, die Nachrichtenveröffentlichung und das Abonnement. 🎜🎜🎜Originallink: https://www.emqx.com/zh/blog/how-to-use-mqtt-in-php🎜🎜Autor: EMQ🎜

Empfohlenes Lernen: „PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonEin Artikel, um schnell zu verstehen, wie man MQTT in PHP-Projekten verwendet. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:juejin.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage