MQTT.js
MQTT.js
- mqtt.js简介
- MQTT测试工具
- mqttbox
- MQTTX
- mqtt使用
- mqtt引入(方式一)
- mqtt引入(方式二)
- 创建mqtt客户端
- 连接到mqtt代理
- 订阅topic
- 处理接收到的消息
- 重新连接
- 取消订阅
- 发布消息
- 断开连接
- 关闭客户端
- MQTT API
- MQTT在VUE中使用
- MQTT在React中使用
- 参考文章
mqtt.js简介
mqtt.js是一个开源的MQTT协议的客户端库,使用 JavaScript 编写,主要用于 Node.js 和 浏览器环境中。是目前 JavaScript 生态中使用最为广泛的 MQTT 客户端库。
MQTT 是一种基于发布/订阅模式的轻量级物联网消息传输协议,可以用极少的代码和带宽为联网设备提供实时可靠的消息服务
由于 JavaScript 单线程特性,MQTT.js 是全异步 MQTT 客户端,MQTT.js 支持 MQTT/TCP、MQTT/TLS、MQTT/WebSocket,在不同运行环境支持的度如下:
● 浏览器环境:MQTT over WebSocket(包括微信小程序、支付宝小程序等定制浏览器环境)
● Node.js 环境:MQTT、MQTT over WebSocket
MQTT测试工具
mqttbox
mqttbox 网盘下载地址:
链接:https://pan.baidu.com/s/1v0PIwD8D4xf-9wKe_bNomg
提取码:gl02
MQTTX
下载地址
https://mqttx.app/zh
mqtt使用
mqtt引入(方式一)
mqtt安装
npm i mqtt
引入mqtt
import mqtt from "mqtt";
mqtt引入(方式二)
<script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script>
<script>// 将在全局初始化一个 mqtt 变量console.log(mqtt)
</script>
创建mqtt客户端
/***
* 浏览器环境* 使用协议为 ws 和 wss 的 MQTT over WebSocket 连接* EMQX 的 ws 连接默认端口为 8083,wss 为 8084* 注意需要在连接地址后加上一个 path, 例如 /mqtt*/// 连接选项
// 根据协议规则必须传递userName: 'admin',password: 'password'
const options = {clean: true, // true: 清除会话, false: 保留会话connectTimeout: 4000, // 超时时间// 认证信息clientId: 'emqx_test',username: 'emqx_test',password: 'emqx_test',
}
const connectUrl = 'wss://broker.emqx.io:8084/mqtt'
const client = mqtt.connect(connectUrl, options)
连接到mqtt代理
client.on('connect', function () {console.log('Connected to MQTT broker');// 订阅主题client.subscribe('topic1');
});
订阅topic
client.subscribe('topic1', { qos: 0 }, function (error, granted) {if (error) {console.log(error)} else {console.log(`${granted[0].topic} was subscribed`)}
});
可以订阅1个或多个topic
// 参数1: 需要订阅的topic,可传入一个字符串,或者一个字符串数组,也可以是一个 topic 对象
// 参数2: 可选,订阅 Topic 时的配置信息
// 参数3: 可选,订阅 Topic 后的回调函数,参数为 error 和 granted,
当订阅失败时 error 参数才存在, granted 是一个 {topic, qos} 的数组,
其中 topic 是一个被订阅的主题,qos 是 Topic 是被授予的 QoS 等级
处理接收到的消息
client.on('message', function (topic, message,packet) {console.log('Received message:', topic.toString(), message.toString());//message 为接收到的消息内容//packet为MQTT报文信息
});
重新连接
client.on('reconnect', () => {console.log("客户端正在重连.....请稍后")$('#div1').text("客户端正在重连.....请稍后")
}
取消订阅
client.unsubscribe(topic, function (error) {if (error) {console.log(error)} else {console.log('Unsubscribed')}
})
取消订阅1个或多个topic
// 参数1:一个字符串或者字符串数组
// 参数2:可选值,取消订阅时的配置信息
// 参数3:取消订阅时的回调函数,参数为 error,当取消订阅失败时 error 参数才存在
发布消息
client.publish('topic2', 'Hello MQTT',{ qos: 0, retain: false }, function (error) {if (error) {console.log(error)} else {console.log('Published')}
});
// 参数1:发送的topic
// 参数2:发送的消息内容
// 参数3:可选,发布消息时的配置信息
// 参数4:可选,发布消息后的回调函数,参数为 error,当发布失败时,该参数才存在
断开连接
client.on('close', function () {console.log('客户端以断开连接..... ')$('#div1').text("客户端以断开连接..... ")
});客户端无法连接或出现错误时触发回调
client.on("error", (error) => {console.log('客户端无法连接或出现错误..... ' + error)$('#div1').text("客户端无法连接或出现错误..... " + error)
});
关闭客户端
client.end();// 参数1: 可选,默认为 false。设置为 true 时将立即关闭客户端,而无需等待断开连接的消息被接受。
注意:使用该值为 true 时,Broker 无法接收到 disconnect 的报文
// 参数2: 可选值,关闭客户端时的配置信息,主要是可以配置 reasonCode,断开连接时的 Reason Code
// 参数3: 当客户端关闭时的回调函数
MQTT API
https://www.emqx.com/zh/blog/mqtt-js-tutorial
MQTT在VUE中使用
https://www.emqx.com/zh/blog/how-to-use-mqtt-in-vue
MQTT在React中使用
https://www.emqx.com/zh/blog/how-to-use-mqtt-in-react
参考文章
MQTT.js 入门教程
相关文章:
MQTT.js
MQTT.js mqtt.js简介MQTT测试工具mqttboxMQTTX mqtt使用mqtt引入(方式一)mqtt引入(方式二)创建mqtt客户端连接到mqtt代理订阅topic处理接收到的消息重新连接取消订阅发布消息断开连接关闭客户端MQTT APIMQTT在VUE中使用MQTT在Reac…...
html滑动文章标题置顶
position: sticky; 基于用户的滚动位置来定位 首先封装一个组件 例如:AAA组件(注意,只能有一层盒子,不能在外面继续包一层div) <template><div class"box">{{title}}</div> </templa…...
Android11 桌面默认横屏导致任务键近期任务布局UI显示错误!
/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java 定义变量:private boolean stch false; keyCode KeyEvent.KEYCODE_APP_SWITCH 取消原来逻辑,采用广播打开近期任务后台 /*/ if (!keyguardOn…...
「Verilog学习笔记」根据状态转移图实现时序电路
专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 这是一个典型的米利型状态机。三段式即可解决。 米利型状态机:即输出不仅和当前状态有关,也和输入有关。 其中ST0,ST1,ST3的…...
使用DHorse发布SpringBoot项目到K8S
前言 在介绍DHorse的操作之前,先来介绍一下使用k8s发布应用的步骤,以SpringBoot应用为例进行说明。 1.首先从代码仓库下载代码,比如GitLab; 2.接着进行构建,比如使用Maven; 3.如果要使用k8s作为编排&am…...
Java修仙记之记录一次与前端女修士论道的经历
文章开始之前,想跟我念一句:福生无量天尊,无量寿佛,阿弥陀佛 第一场论道:id更新之争 一个天气明朗的下午,前端的小美女长发姐告诉我:嘿,小后端,你的代码报错了 我答道&am…...
初识linux(1)
文章目录 什么是linux什么是操作系统?开源 怎么装linux的环境基础指令lspwdcdtouchmkdirrmdir与rmmancpmv 什么是linux linux是一款开源操作系统 什么是操作系统? 操作系统:一种对计算机所有计算机软硬件进行控制和管理的系统软件 开源 开源&…...
投资黄金:如何选择正确的黄金品种增加收益?
黄金一直以来都是备受投资者青睐的避险资产,然而,在庞大的黄金市场中,选择适合自己的黄金品种成为影响收益的关键因素。黄金投资并不只有一种方式,而是有很多种不同的黄金品种可以选择。每种黄金品种都有其独特的特点和风险&#…...
Rust错误处理机制:优雅地管理错误
大家好!我是lincyang。 今天,我们要探讨的是Rust语言中的错误处理机制。 Rust作为一种系统编程语言,对错误处理的重视程度是非常高的。它提供了一套既安全又灵活的机制来处理可能出现的错误。 Rust错误处理的两大类别 在Rust中࿰…...
docker-compose安装harbor
docker-compose安装harbor 环境:centos7 1、安装docker 官方文档 https://docs.docker.com/engine/install/centos/ 1、卸载旧版本 $ sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate …...
【python学习】基础篇-常用模块-shutil文件和目录操作
shutil模块是Python标准库中的一个模块,提供了对文件和目录进行高级操作的函数。 以下是shutil模块的一些常用函数: 1.复制文件: 将源文件src复制到目标文件dst。如果follow_symlinks为True,则会跟随符号链接。 shutil.copy(src, dst, *, f…...
鸿蒙系统调研适配
写在前面: 以下内容基于我个人翻阅的官方资料以及自己的理解写的,可能存在认知和理解上的偏差,有些地方并不一定是对的,请谨慎对待,注意甄别! 一、鸿蒙OS是什么? 华为推出的多端统一平台&…...
SAP gui 登录条目不让修改
今天碰到用户安装的GUI 770 版本,不让修改,也不让添加 后面再选项里面找到了...
华为ac+fit无线2层漫游配置案例
ap的管理dhcp在ac上,业务dhcp在汇聚交换机上、并且带2层漫游 R1: interface GigabitEthernet0/0/0 ip address 11.1.1.1 255.255.255.0 ip route-static 12.2.2.0 255.255.255.0 11.1.1.2 ip route-static 192.168.0.0 255.255.0.0 11.1.1.2 lsw1: vlan batch 100…...
nginx的location中配置路径讲解
初次接触:可能会遇到404找不到页面的错误,主要原因是配置路径问题; 规则:ip port 等于 root,假设server的配置如下: server { listen 80; #端口号 location / { root /opt/sta…...
No appropriate protocol -- Mysql
DataGrip连接mysql报以下异常信息: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate) The following required algorithms might be disabled: SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5wi…...
Using Set Processing Effectively 有效地使用集合处理
Using Set Processing Effectively 有效地使用集合处理 The information in the topics that follow applies if you are developing new or upgrading older Application Engine programs to adhere to a set-based model. 如果要开发新的应用程序引擎程序或升级旧的应用程序…...
HarmonyOS开发Java与ArkTS如何抉择
在“鸿蒙系统实战短视频App 从0到1掌握HarmonyOS”视频课程中,很多学员来问我,在HarmonyOS开发过程中,面对Java与ArkTS,应该选哪样? 本文详细分析Java与ArkTS在HarmonyOS开发过程的区别,力求解答学员的一些…...
“茶叶创新:爆改营销策略,三个月狂销2300万“
我的朋友去年制作了一款白茶,并在短短三个月内将其销售量推到了2300万的高峰。你相信吗? 这位朋友并没有任何茶叶方面的经验,他只是一个有着冒险精神的企业家。他先找到了一家代工厂,帮助他把他的茶叶理念转化为现实。 当他把茶叶…...
分享一个生成哈希值的C代码
代码是我在阅读assimp源码时看到的,不依赖任何第三方,可直接集成。 #pragma once #ifndef AI_HASH_H_INCLUDED #define AI_HASH_H_INCLUDED#ifdef __GNUC__ # pragma GCC system_header #endif#include <stdint.h> #include <string.h> #…...
MySQL开发环境标准化实践:Docker Compose自动化部署与脚本管理
1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目,叫“MySQL_Development_Work”。光看名字,你可能会觉得这又是一个普通的MySQL学习笔记或者代码片段合集。但当我点进去,花时间梳理了它的结构、代码和文档后,我发现它…...
医学影像分割:2D超图像与3D网络性能对比与选型指南
1. 项目概述:从“切片”到“体素”的认知跃迁在医学影像分析领域,分割任务一直是核心中的核心。无论是肿瘤的勾画、器官的量化,还是病灶的追踪,精准的分割都是后续诊断、治疗规划和疗效评估的基石。长久以来,处理三维医…...
LSTM门控机制原理解析与工业级调优实战
1. 为什么今天还要认真学LSTM?——一个被低估但从未过时的序列建模基石你可能已经注意到,现在打开任何一篇讲大模型、讲NLP前沿的文章,标题里不是“Transformer”就是“LLM”,仿佛RNN时代早已尘封进教科书的附录。但上周我帮一家做…...
鸿蒙 App 重构:如何从混乱到清晰?
子玥酱 (掘金 / 知乎 / CSDN / 简书 同名) 大家好,我是 子玥酱,一名长期深耕在一线的前端程序媛 👩💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚…...
CANN/asc-devkit AdjustSoftMaxRes API
AdjustSoftMaxRes 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitco…...
IP6520_Q1 36W输出 集成多种快充输出协议的降压SOC 支持 PD2.0/PD3.1/PPS ,QC2.0/QC3.0/QC3+,AFC,FCP
1 特性 符合 AEC-Q100 标准要求 Grade 2: -40℃ ~ 105℃ 同步开关降压转换器 内置功率 MOS 输入工作电压范围:7.3V 到 29.5V 输出电压范围:3V~12V 集成输出电压线补功能 输出具有 CV/CC 特性 VIN16V,V…...
为OpenClaw智能体工作流配置Taotoken多模型后端
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为OpenClaw智能体工作流配置Taotoken多模型后端 对于使用OpenClaw框架构建AI工作流的开发者而言,灵活选择并接入不同的…...
CANN/hcomm算法分析器使用指南
算法分析器工具使用指南 【免费下载链接】hcomm HCOMM(Huawei Communication)是HCCL的通信基础库,提供通信域以及通信资源的管理能力。 项目地址: https://gitcode.com/cann/hcomm 工具简介 本文档仅用于指导用户编译、运行本目录下的…...
【路径规划】基于启发式搜索与增量启发式搜索方法MRPP或MAPF的多机器人路径规划算法附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 dz…...
泰山派3M-RK3576-镜像烧录-成品镜像烧录
【立创泰山派3-RK3576开发板】成品镜像烧录 什么是成品镜像 简单来说就是一个 .img 就是完整的系统镜像,烧录这一个就可以完整的运行系统,这样的镜像叫做成品镜像。 这样的镜像体积都比较大,但胜在烧录方便。 例如:update.img…...
