一文快速认识PHP项目中怎么使用MQTT
发布时间:2022-08-03 16:04:19 所属栏目:PHP教程 来源:互联网
导读:PHP 是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML 中,尤其适合 Web 开发。 本文主要介绍如何在 PHP 项目中使用 php-mqtt/client 客户端库 ,实现 MQTT 客户端与 MQTT 服务器的连接、订阅、取消订阅、收发消息等功能。 MQTT 客户端库选择
PHP 是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML 中,尤其适合 Web 开发。 本文主要介绍如何在 PHP 项目中使用 php-mqtt/client 客户端库 ,实现 MQTT 客户端与 MQTT 服务器的连接、订阅、取消订阅、收发消息等功能。 MQTT 客户端库选择 本文选择了 composer 上下载量最高的 php-mqtt/client 这个客户端库,更多 PHP-MQTT 客户端库可以在 Packagist - Search 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 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 PhpMqttClientMqttClient; 设置 MQTT Broker 连接参数 设置 MQTT Broker 连接地址,端口以及 topic,同时我们调用 PHP rand 函数随机生成 MQTT 客户端 id。 $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]: %sn", $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), // retain true ); printf("msg $i sendn"); sleep(1); } // 客户端轮询以处理传入消息和重发队列 $mqtt->loop(true); 完整代码 服务器连接、消息发布与接收代码。 require('vendor/autoload.php'); $server = 'broker.emqx.io'; $port = 1883; $clientId = rand(5, 15); $username = 'emqx_user'; $password = null; $clean_session = false; $connectionSettings = new ConnectionSettings(); $connectionSettings ->setUsername($username) ->setPassword(null) ->setKeepAliveInterval(60) // Last Will 设置 ->setLastWillTopic('emqx/test/last-will') ->setLastWillMessage('client disconnect') ->setLastWillQualityOfService(1); $mqtt->connect($connectionSettings, $clean_session); printf("client connectedn"); $mqtt->subscribe('emqx/test', function ($topic, $message) { printf("Received message on topic [%s]: %sn", $topic, $message); }, 0); 'emqx/test', // payload json_encode($payload), // qos 0, // retain true ); printf("msg $i sendn"); sleep(1); } $mqtt->loop(true); (编辑:开发网_开封站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |