千家信息网

PHP项目中MQTT的使用方法

发表于:2024-09-27 作者:千家信息网编辑
千家信息网最后更新 2024年09月27日,这篇文章主要介绍"PHP项目中MQTT的使用方法",在日常操作中,相信很多人在PHP项目中MQTT的使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"PHP项目中M
千家信息网最后更新 2024年09月27日PHP项目中MQTT的使用方法

这篇文章主要介绍"PHP项目中MQTT的使用方法",在日常操作中,相信很多人在PHP项目中MQTT的使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"PHP项目中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 --versionPHP 7.4.21 (cli) (built: Jul 12 2021 11:52:30) ( NTS )Copyright (c) The PHP GroupZend 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 主题发布消息,发布完成之后客户端需要进入轮询状态,处理传入的消息和重发队列:

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);

完整代码

服务器连接、消息发布与接收代码。

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);

测试

运行 MQTT 消息发布代码,我们将看到客户端已经成功连接,且消息已经逐条发布并接收成功:

php pubsub_tcp.php

到此,关于"PHP项目中MQTT的使用方法"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0