我的编程空间,编程开发者的网络收藏夹
学习永远不晚

php使用mqtt

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

php使用mqtt

php使用mqtt

说明:本文旨在说明php关于mqtt的基本用法:基本发布和订阅、共享订阅。
采用的php采用的框架是easyswoole3.5.1(php+swoole),mqtt软件用的是emqx4.3,采用的php软件库是simps/mqtt 1.4(采用它的原因是,它是第一个支持5.0协议的软件库)。

如果是第一次使用mqtt 建议先看emqx文档。
easyswoole文档:https://www.easyswoole.com/
emqx文档:https://www.emqx.io/docs/zh/v4.3/
simps/mqtt 文档:https://packagist.p2hp.com/packages/simps/mqtt

mqtt基础配置
emqx安装后:基础配置文件在/etc/eqmx/emqx.conf
参数修改说明:

//最大报文尺寸(一次上报的数据量)mqtt.max_packet_size =10MB//飞行窗口大小。飞行窗口用于存储未被应答的 QoS 1 和 QoS 2 消息。,实际是储存未被消费的消息,增大可以提高处理速度zone.external.max_inflight = 320

php客户端配置

    //mqtt基础配置    'clientMqtt'   => [        'clientConfig' => [//订阅方配置            'userName'      => '',     // 用户名(可以不填:订阅主题的时候在填写)            'password'      => '',     // 密码(可以不填:订阅主题的时候在填写)            'clientId'      => '',     // 客户端id(可以不填:订阅主题的时候在填写)            'keepAlive'     => 50,     // 心跳周期 默认0秒,设置成0代表禁用            'protocolName'  => 'MQTT', // 协议名,默认为MQTT(3.1.1版本),也可为MQIsdp(3.1版本)            'protocolLevel' => 4,      // 协议等级,MQTT3.1.1版本为4,5.0版本为5,MQIsdp为3            'properties'    => [             'session_expiry_interval' => 60,             'receive_maximum' => 65536,             'topic_alias_maximum' => 65536,            ],     // MQTT5 中所需要的属性(只有5的时候才填写,不是5绝对不能写)            'delay'         => 3000,   // 重连时的延迟时间 (毫秒)            'maxAttempts'   => -1,      // 最大重连次数。默认-1,表示不限制            'swooleConfig'  => [                 'open_mqtt_protocol' => true,                 'package_max_length' => 5 * 1024 * 1024//包大小            ]        ],        //下面的作为客户端,mqtt发布方使用        'host'         => '127.0.0.1',        'port'         => 'xxxx',//创建客户端(订阅主题)用的        'appID'        => 'XXX',        'appSecret'    => 'XXXX',    ],

php创建主题

namespace xxx\xxxx;use EasySwoole\Component\Process\AbstractProcess;use EasySwoole\EasySwoole\Config;use Simps\MQTT\Client;use Simps\MQTT\Config\ClientConfig;use Simps\MQTT\Hex\ReasonCode;use Simps\MQTT\Protocol\Types;class Test2Subscribe extends AbstractProcess{    public function run($arg)    {        go(function () {//采用协程方案                     //获取mqtt基础配置             $clientConfig ='';//获取上面的配置参数            $clientConfig['clientId'] = 'user2';//定义客户端            $clientConfig['userName'] = 'user2';//定义用户名            //定义配置参数            $configObj                = new ClientConfig($clientConfig);           //客户端链接            $client = new Client($getConf['host'], $getConf['port'], $configObj);            $client->connect();             //创建主题            // No Local:是否想自己转发自己发布的消息:true为不转发、            //Retain As Published:服务端向客户端转发消息时是否要保留其中的 Retain 标识            //Retain Handling 订阅建立时服务端是否向客户端发送保留消息            //No Local 、Retain As Published、Retain Handling 只支持mqtt5协议            if ($clientConfig['protocolLevel'] == 5) {//mqtt5协议                $topics['$queue/test1'] = [                    'qos'                 => 1,                    'no_local'            => true,                    'retain_as_published' => true,                    'retain_handling'     => 2,                ];            } else {//mqtt3.1.1或3协议                 //主题名:qos                $topics['$queue/test1'] = 1;            }            //主题说明:一个主题可以被多个用户订阅,但是他们的用户id不能相同            //$share/g2/topic 为共享订阅的标记,用于平台方的负载均衡,EMQX 会向带topic的两个群组 g1 和 g2 同时发送 msg1 但是各组中只会有一个接收到信息            //$queue/topic 为特殊的共享订阅(不带群组的共享订阅),多个用户订阅,但只会有一个用户收到消息            //            //订阅主题            $res = $client->subscribe($topics);            //时间            $timeSincePing = time();    while (true) {                try {                    $buffer = $client->recv();                    if ($buffer && $buffer !== true) {                        //处理消息                        if (isset($buffer['message'])) {                        }                        // QoS1 PUBACK                        if ($buffer['type'] === Types::PUBLISH && $buffer['qos'] === 1) {$client->send(    [        'type'       => Types::PUBACK,        'message_id' => $buffer['message_id'],    ],    false);                        }                        if ($buffer['type'] === Types::DISCONNECT) {echo sprintf(    "Broker is disconnected, The reason is %s [%d]\n",    ReasonCode::getReasonPhrase($buffer['code']),    $buffer['code']);$client->close($buffer['code']);break;                        }                    }                    //心跳                    if ($timeSincePing <= (time() - $client->getConfig()->getKeepAlive())) {                        $buffer = $client->ping();                        if ($buffer) {//echo 'send ping success' . PHP_EOL;$timeSincePing = time();                        }                    }                } catch (\Throwable $e) {                    throw $e;                }            }        });    }}

来源地址:https://blog.csdn.net/qq_34892981/article/details/128634909

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

php使用mqtt

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

2023-09-01

python——paho-mqtt使用

paho-mqttpaho-mqtt 是一个MQTT python client 库,支持mqtt 3.1/ 3.1.1协议。 · The MQTT protocol is a machine-to-machine (M2M)/”I
2023-01-31

怎么在Spring Boot中使用MQTT

这篇文章给大家分享的是有关怎么在Spring Boot中使用MQTT的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。为什么选择MQTTMQTT的定义相信很多人都能讲的头头是道,本文章也不讨论什么高大上的东西,旨在用
2023-06-14

JS 连接MQTT的使用方法

这篇文章主要介绍了JS 连接MQTT的使用方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-01-28

vue3使用mqtt的示例代码

这篇文章主要介绍了vue3使用mqtt的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-05-16

php mqtt服务器怎么搭建

创建MQTT服务器和处理客户端交互本教程指导如何在PHP中创建MQTT服务器,并处理客户端连接、消息发布和断开连接。它涵盖了安装MQTT库、配置服务器、设置回调函数以及处理客户端交互的步骤。通过遵循这些步骤,开发人员可以轻松创建自定义MQTT服务器,用于物联网和消息传递应用程序。
php mqtt服务器怎么搭建
2024-04-13

详解JSHTMLWeb端使用MQTT通讯测试

这篇文章主要介绍了JSHTMLWeb端使用MQTT通讯测试,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-05-16

怎么在uniapp项目中使用mqtt

这篇文章将为大家详细讲解有关怎么在uniapp项目中使用mqtt,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、uniapp插件市场的参考插件  https://ext.dcloud.net.cn/pl
2023-06-15

MQTT 遗嘱消息(Will Message)的使用

简介当客户端断开连接时,发送给相关的订阅者的遗嘱消息。以下情况下会发送 Will Message:服务端发生了I/O 错误或者网络失败;客户端在定义的心跳时期失联;客户端在发送下线包之前关闭网络连接;服务端在收到下线包之前关闭网络连接。遗嘱
2023-06-03

使用python实现mqtt的发布和订阅

使用python编写程序进行测试MQTT的发布和订阅功能。首先要安装:pip install paho-mqtt 我的MQTT部署在阿里云的服务器上面,所以我在本机上编写了python程序进行测试。然后在shell里面重新打开一个终端,订阅
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录