MQTT在Web开发中的应用

前文写了使用Docker部署了mqtt服务,今天来写一下,mqtt在web开发中的应用实例,希望能帮到大家,话不多说,直接开始。

一:脚手架安装mqtt

作者这里用的vue3的框架
直接上命令,npm安装或者pnpm进行安装。

npm install mqtt

二:使用mqtt

1.创建一个mqtt封装的js文件
比如我创建一个mqttTool.js
2.在js文件中引入mqtt

import * as mqtt from 'mqtt/dist/mqtt.min.js';

3.封装全局服务

const getMQTTUrl = () =>{let url = import.meta.env.VITE_APP_PHAR_MQTT;url ='ws://0.0.0.0:8000/mqtt';	//填写自己的mqtt服务ipconsole.info("当前 MQTT 地址为 " + url);return url 
}
//MQTT全局服务
export default class MQTTService {static instance = null;static get Instance() {if (!this.instance) {this.instance = new MQTTService();}return this.instance;}// 事件mitt = new mitt();//配置参数userOptions= {username: "mqttName",password: "test123",clientId: Math.random().toString(36).substr(2),};topics = [];//["test1", "dtest2"]; //需要订阅的主题// 和服务端连接的MQTT对象client = null;mqttUrl = getMQTTUrl() ;// 标识是否连接成功connected = false;// 记录重试的次数sendRetryCount = 0;// 重新连接尝试的次数connectRetryCount = 3;// 再次连接reconnect(){if (this.client==null){this.connect()}}//定义连接服务器的方法connect() { let that =this;this.client = mqtt.connect(this.mqttUrl, this.userOptions);this.client.on("connect", (e) => {this.connected = true;// 重置重新连接的次数this.connectRetryCount = 3;that.topics.forEach((topic) => {that.client.subscribe(topic,{ qos: 0, retain: 0 },(err, granted) => {if (granted.length > 0) {if (!err) {console.log(`全局成功订阅主题:${granted[0].topic}`);} else {console.log("全局订阅主题失败", err);}}});});});//失败重连this.client.on('error', (e) => {if (this.sendRetryCount < this.connectRetryCount-1){console.log("连接服务端失败:",e)this.connected = false;this.sendRetryCount++setTimeout(() => {this.connect();}, 500 * this.connectRetryCount);}});this.client.on("message", (topic, message, packet) => {// 输出订阅的主题和消息console.log(`接收到主题为 ${topic} 的消息:`, message.toString());let res ={topic:topic,message:message,packet:packet}});}close(){ // 退出登录后断开连接if (this.client) {this.client.end(); //离开页面的时候  关闭mqtt连接this.client = null;console.log("关闭mqtt:");}}// 发送数据的方法send(data) {// 判断此时此刻有没有连接成功if (this.connected) {this.sendRetryCount = 0;try {this.client.publish(data.sender, data);console.log("s发送到服务端:",data);} catch (e) {this.client.publish(data.sender, JSON.stringify(data)); console.log("O发送到服务端:",data)}} else {this.sendRetryCount++;setTimeout(() => {this.reconnect() // 重新连接this.client.publish(data.sender, JSON.stringify(data));}, this.sendRetryCount * 500);}}// 发送数据的方法2sendBySender(sender,data) {// 判断此时此刻有没有连接成功if (this.connected) {this.sendRetryCount = 0;try {this.client.publish(sender, data);console.log("s发送到服务端:",data)} catch (e) {this.client.publish(sender, JSON.stringify(data)); console.log("O发送到服务端:",data)}} else {this.sendRetryCount++;setTimeout(() => {this.reconnect() // 重新连接this.client.publish(sender, JSON.stringify(data));}, this.sendRetryCount * 500);}}//自定义订阅内容setTopics(data){this.topics = data;this.close();this.connect();}getTopics(){return this.topics;}//添加订阅addTopic(topic){this.topics.push(topic);if (this.connected) {this.client.subscribe(topic,{ qos: 0, retain: 0 },(err, granted) => {if (granted.length > 0) {if (!err) {console.log(`全局成功订阅主题:${granted[0].topic}`);} else {console.log("全局订阅主题失败", err);}}});  }else{this.connect();}}
}

4.调用
在需要的vue中调用

import MQTTService from '/@/utils/mqttTool.js'
let mqttServe = MQTTService.Instance;

然后使用mqttServe对象调用相关方法即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/633889.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用pycharm连接读取orcl数据库的表

背景&#xff1a;工作需要 需求&#xff1a;使用pycharm访问远程oracle类型数据库的表&#xff0c;表中包含lob字段&#xff08;这也是个坑&#xff01;&#xff09; 麻了&#xff0c;搞了一个星期&#xff0c;终于成功了&#xff0c;真可谓是每步都有坑&#xff0c;看的文章也…

Microsoft365管理员创建共享邮箱

​​​​​​ 创建共享邮箱 项目2023/08/2110 个参与者 反馈 本文内容 创建共享邮箱并添加成员您应使用哪些权限&#xff1f;阻止登录共享邮箱帐户向 Outlook 添加共享邮箱 显示另外 3 个 备注 如果你的组织使用的是混合 Exchange 环境&#xff0c;则你应使用本地 Excha…

SSH数据流量监控

简介 检查网络连接的数据传输情况有以下一些实际意义&#xff1a; 安全监控&#xff1a;检查数据传输情况可以帮助你识别异常活动或潜在的安全威胁。如果发现大量不寻常的数据传输活动&#xff0c;可能表示有未经授权的访问或恶意行为。通过监控数据传输&#xff0c;可以及时发…

SQLite 3.45.0 发布!

SQLite 开发团队于 2024 年 01 月 18 日发布了 SQLite 3.45.0 版本&#xff0c;带来了一些 JSON 和优化器增强&#xff0c;让我们一睹为快&#xff01; JSON 函数 SQLite 3.45.0 版本开始&#xff0c;所有的 JSON 函数将会使用全新的内部格式存储 JSON 数据&#xff0c;也就是…

服务器工作环境要求

在开展网站服务之前&#xff0c;合适的服务器工作环境是必不可少的。服务器工作环境指需要一定的软硬件条件来保障服务器可以正常地运转和提供高效率的服务。在这篇文章中&#xff0c;我们将会详细讲解服务器工作环境所需的要素。 一、硬件要求 服务器硬件方面包括了基本的电…

网络 - 网速很慢一定是网不好引起的吗?

问题描述 网速很慢一定是网不好引起的吗&#xff1f;其实不然&#xff0c;也有可能跟 DNS 有关噢~ 原因分析 一开始以为开了小飞机&#xff0c;导致网络不好&#xff0c;发现关闭了还是这样&#xff0c;后来摸索了老半天发现&#xff0c;会不会是 DNS 解析服务器不给力引起的…

阿里云地域和可用区分布表,2024更新

2024年阿里云服务器地域分布表&#xff0c;地域指数据中心所在的地理区域&#xff0c;通常按照数据中心所在的城市划分&#xff0c;例如华北2&#xff08;北京&#xff09;地域表示数据中心所在的城市是北京。阿里云地域分为四部分即中国、亚太其他国家、欧洲与美洲和中东&…

周五~~~摸鱼

学习也能很快乐哦~~&#xff01; vim /etc/motd 修改这个文件可以让你刚登录linux 系统显示图形效果 佛祖 效果&#xff1a; 自行车 效果&#xff1a; love \ ------------ / ------ \ \ …

Java中位运算右移>>和>>>的区别

在Java编程语言中&#xff0c;>> 和 >>> 都是右移运算符&#xff0c;但它们有以下区别&#xff1a; 算术右移&#xff08;Arithmetic Right Shift, >>&#xff09;&#xff1a; 当对一个有符号整数进行右移时&#xff0c;Java使用的是算术右移。这意味着…

Android ANR 总结

工作之余&#xff0c;对之前学习到的和结合自己项目过程中的遇到的问题经验做一些总结&#xff0c;下面讲一讲Android开发过程中遇到的ANR的问题&#xff0c;做一下整理 一、概述 解决ANR一直是Android 开发者需要掌握的重要技巧&#xff0c;一般从三个方面着手。 开发阶段&a…

CMake TcpServer项目 生成静态库.a / 动态库.so

CMake 实战构建TcpServer项目 静态库/动态库-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/135608829?spm1001.2014.3001.5501 在这篇博客的基础上&#xff0c;我们把头文件放在include里边&#xff0c;把源文件放在src里边&#xff0c;重新构建 hehedali…

区间预测 | Matlab实现LSTM-Adaboost-ABKDE的集成学习长短期记忆神经网络自适应带宽核密度估计多变量回归区间预测

区间预测 | Matlab实现LSTM-Adaboost-ABKDE的集成学习长短期记忆神经网络自适应带宽核密度估计多变量回归区间预测 目录 区间预测 | Matlab实现LSTM-Adaboost-ABKDE的集成学习长短期记忆神经网络自适应带宽核密度估计多变量回归区间预测效果一览基本介绍程序设计参考资料 效果一…

五个常见的 jQuery 面试题

1. 如何使用 jQuery 选择器选中所有 class 为 “example” 的元素? $(".example");2. 如何使用 jQuery 遍历一个数组&#xff0c;并将每个元素添加到一个 <ul> 列表中? <ul id"list"></ul>var array ["Item 1", "It…

Plane Geometry (Junior High School)

初中平面几何&#xff0c; ACBD, ∠CAD60&#xff0c;∠C40&#xff0c;求∠B Vertical Calculation-CSDN博客 Rectangular Area-CSDN博客

开发安全之:Password Management: Hardcoded Password

Overview Hardcoded password 可能会削弱系统安全性&#xff0c;并且无法轻易修正出现的安全问题。 Details 使用硬编码方式处理密码绝非好方法。这不仅是因为所有项目开发人员都可以使用通过硬编码方式处理的密码&#xff0c;而且还会使解决这一问题变得极其困难。在代码投…

kafka系列(二)

本章承接kafka一内容&#xff0c;文章在本人博客主页都有&#xff0c;可以自行点击浏览。 幂等性 请求执行多次&#xff0c;但执行的结果是一致的。 如果&#xff0c;某个系统是不具备幂等性的&#xff0c;如果用户重复提交了某个表格&#xff0c;就可能会造成不良影响。例如…

街机模拟游戏逆向工程(HACKROM)教程:[10]68K汇编add指令

我们之前已经介绍了move指令&#xff0c;从本章开始&#xff0c;我们会一步步介绍更多的M68K指令。 简介&#xff1a; add :加法指令 该指令的作用是[源操作数]加[目的操作数]&#xff0c;结果传递至[目的操作数]&#xff0c;[源操作数]保持不变。 例子&#xff1a;…

基于改进蝙蝠算法的三维航线规划算法

matlab2020a可正常运行 基于改进蝙蝠算法的三维航线规划资源-CSDN文库

Oracle 数据库备份与恢复的重要性与最佳实践

文章目录 一、备份的重要性二、备份工具-RMAN四、比较备份策略五、实例恢复六、完全恢复与不完全恢复七、备份与恢复脚本 引言&#xff1a; 在现代信息时代&#xff0c;数据已成为组织和企业最重要的资产之一。保护和恢复数据的能力对于确保业务连续性和减少潜在风险至关重要。…

Flink1.17 基础知识

Flink1.17 基础知识 来源&#xff1a;B站尚硅谷 目录 Flink1.17 基础知识Flink 概述Flink 是什么Flink特点Flink vs SparkStreamingFlink的应用场景Flink分层API Flink快速上手创建项目WordCount代码编写批处理流处理 Flink部署集群角色部署模式会话模式&#xff08;Session …