uniapp与设备通信 通过mqtt实现通信

news/2024/9/22 18:08:35/

MQTT (Message Queuing Telemetry Transport)

协议类型:MQTT 是一种轻量级的发布/订阅消息传输协议,通常基于 TCP/IP 实现。

功能:设计用于高延迟网络环境中,在带宽有限的情况下高效传输小量数据。广泛用于物联网(IoT)设备之间的通信。

特点:

  • 发布/订阅模型:客户端可以发布消息到主题,也可以订阅主题以接收消息。
  • 质量服务等级(QoS):支持三种服务质量等级(QoS 0、1、2),以确保消息传递的可靠性。
  • 轻量级:头部开销小,适合资源受限的设备。
  • 保持会话:支持保持会话和持久化会话,以便在连接丢失后恢复状态。

WebSocket

协议类型:WebSocket 是一种双向全双工通信协议,建立在 TCP 协议之上。

功能:允许在客户端和服务器之间建立持久的、全双工的通信通道。主要用于浏览器和服务器之间的实时通信。

特点:

  • 全双工通信:客户端和服务器可以在同一连接上同时发送和接收数据。
  • 低延迟:提供实时的数据交换,减少通信延迟。
  • Web集成:原生支持浏览器,适合基于 Web 的应用程序(如实时聊天、在线游戏等)。

比较

设计目标:

MQTT:优化为在低带宽和高延迟的网络环境下工作,适合 IoT 设备和传感器。
WebSocket:优化为在浏览器和服务器之间实现实时、全双工通信,适合 Web 应用程序。

使用场景:

  • MQTT:常用于物联网(IoT)、移动应用的后台服务、传感器网络等。
  • WebSocket:常用于实时网页应用、聊天应用、在线游戏等。

通信模型:

  • MQTT:基于发布/订阅模型,消息发布者和订阅者不需要直接连接。
  • WebSocket:基于客户端和服务器之间的全双工通信,数据流动是对等的。

协议开销:

  • MQTT:更轻量,适合低带宽和高延迟的环境。
  • WebSocket:在网络条件较好的环境下使用,适合实时、快速的数据交换。
  publishMessage() {//开关触发if (this.client) {this.client.publish("zhLock/openLock", "Hello");} else {console.log("MQTT client is not initialized");}},onLoad() {// 动态引入 MQTT.js 库const script = document.createElement("script");script.src = "https://unpkg.com/mqtt/dist/mqtt.min.js";script.onload = () => {// 初始化 MQTT 客户端this.client = mqtt.connect("ws://broker.hivemq.com:8000/mqtt", {username: "admin",password: "public",clientId: `client_${Math.random().toString(36).substring(2, 15)}`, // 生成唯一的 clientIdcleanSession: true,reconnectPeriod: 1000, // 1秒重新连接一次});// 连接成功回调this.client.on("connect", () => {console.log("连接成功回调");// 订阅主题const topics = ["zhLock/lockHeart", "zhLock/lockSuccess", "zhLock/openLock"];topics.forEach((topic) => {this.client.subscribe(topic, (err) => {if (!err) {console.log(`Subscribed to ${topic}`);}});});});// 处理接收到的消息this.client.on("message", (topic, message) => {console.log("处理接收到的消息 Received message:", topic, message.toString());switch (topic) {case "zhLock/lockHeart":// 处理锁心跳消息break;case "zhLock/lockSuccess":// 处理锁成功消息break;case "zhLock/openLock":// 处理开锁消息break;default:console.warn(`Unhandled topic: ${topic}`);}});// 处理连接错误事件this.client.on("error", (err) => {console.log(" 处理连接错误事件 MQTT connection error:", err);});};document.head.appendChild(script);},

http://www.ppmy.cn/news/1510612.html

相关文章

【ARM+Codesys 客户案例 】 基于RK3568/A40i/STM32+CODESYS在智能制造中的应用案例:液压动力装置

Poppe Potthoff是一家专门从事高压领域技术研发和产品制造的集团公司,该公司为汽车行业、特种车辆行业、船舶行业等开发制造先进的技术产品。 信迈提供ARMCodesys国产化定制。 Poppe Potthoff在其诺德豪森工厂研发用于爆破测试,自应力加工、脉冲测试和…

HTML静态网页成品作业(HTML+CSS)——古诗词网设计制作(5个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码CSS部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有5个页面。 &#x1…

Java集合提升

1. 手写ArrayList 1.1. ArrayList底层原理细节 底层结构是一个长度可以动态增长的数组(顺序表)transient Object[] elementData; 特点:在内存中分配连续的空间,只存储数据,不存储地址信息。位置就隐含着地址。优点 节…

C++ 126类和对象_面像对像_继承

126类和对象_面像对像_继承 学习内容 继承 语法 class 子类名 : 继承方式 父类名 class PersonModel : public BaseModel 继承方式 : publc , protected, private 代码 #include<iostream> using namespace std;//cout 在这里&#xff…

关于android中的各种尺寸与计算

--张学友《心如刀割》很好听 先说几个术语&#xff1a; Screen size(屏幕尺寸)&#xff1a; 指的是手机实际的物理尺寸&#xff0c;比如常用的2.8英寸&#xff0c;3.2英寸&#xff0c;3.5英寸&#xff0c;3.7英寸 摩托罗拉milestone手机是3.7英寸 Aspect Ratio(宽高比率)&am…

关于鸿蒙开发中滚动容器Scroll的介绍

当子组件的布局尺寸 超过Scroll的尺寸 时&#xff0c;内容可以滚动。 Scroll的核心用法 用法说明&#xff1a; Scroll设置尺寸设置溢出的子组件【只支持一个子组件】滚动方向&#xff1a;支持横向和纵向&#xff0c;默认纵向 Scroll(){// 只支持一个子组件Column(){// 内容…

解析 Vue 中的app.version、 app.provide 与 app.runWithContext :原理、应用与实例剖析

目录 app.provide app.runWithContext ​​​​​​​app.version 非 VIP 用户能够通过积分下载博文资源 app.provide 在 Vue 3.0 中,app.provide充当着在应用层级提供全局共享数据或者服务的关键角色。 app.provide(key, value) 这一方法接收两个关键参数,其中 …

13、14代CPU故障迎来结局,intel或将卖大楼了

AMD 本应该在上个月就发布的锐龙 9000 系列&#xff0c;终于在 8 月 8 日正式上市了。 新一代的 Ryzen 9000 尽管在性能上属于中规中矩的常规迭代&#xff0c;但是因为 IPC 的进步和先进工艺的加持下&#xff0c;积热问题带来了极大的改善。 相较于 AMD 这边的春风得意&#x…