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

server/2024/9/23 7:36:18/

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/server/101378.html

相关文章

Leetcode—1006. 笨阶乘【中等】

2024每日刷题&#xff08;156&#xff09; Leetcode—1006. 笨阶乘 实现代码 class Solution { public:int clumsy(int n) {stack<int> st;st.push(n);n--;int idx 0;while(n ! 0) {if(idx % 4 0) {int num st.top() * n;st.pop();st.push(num);} else if(idx % 4 …

C/C++中奇妙的类型转换

1.引言 大家在学习C语言的时候&#xff0c;有没有遇见过类似于下面这样的代码呢&#xff1f; // 整形转bool int count 10; while(count--) {cout << count << endl; }// 指针转bool int* ptr cur; while(ptr) {//…… } 众所周知&#xff0c;while循环的判断…

Redis相关介绍

Redis 是一个开源的高性能键值数据库&#xff0c;它不仅可以作为数据库使用&#xff0c;还可以作为缓存和消息中间件。Redis 支持多种数据结构&#xff0c;包括字符串、哈希、列表、集合、有序集合、位图、超日志和地理空间索引等。它因其高性能和丰富的数据结构支持在各种场景…

用Python实现9大回归算法详解——05. 梯度提升回归(Gradient Boosting Regression)

1. 梯度提升回归的基本概念 1.1 什么是梯度提升&#xff1f; 梯度提升是一种集成学习方法&#xff0c;通过组合多个弱学习器来构建一个强大的预测模型。在梯度提升框架中&#xff0c;每个弱学习器都试图修正前一个模型的错误。与简单的加法模型不同&#xff0c;梯度提升通过逐…

uview-plus多列模式与多列联动实践

项目场景&#xff1a;部门多级联动&#xff0c;实现效果&#xff1a; 选项数组的格式如下&#xff1a; party_info: [ [一级部门 1,一级部门 ,2,一级部门 3,一级部门 4], [二级部门 1,二级部门 ,2,二级部门 3], [三级部门 1,三级部门 ,2] …

实现一个自定义的Collector!

背景 当前有多个用户&#xff0c;产品提出一个需求&#xff0c;根据userStatus分组&#xff0c;然后将每个分组中的用户按照gender进行累加得到不同userStatus组下的gender总和 以map类型返回&#xff0c;而且要求使用stream.collect(Collector.groupingBy())方法一行写完&…

【数据结构与算法】图

图目录 一.图的原理二.图的表示1.邻接列表2.邻接矩阵 三.图的结构——邻接表四.邻接表的初始化五.邻接表的创建六.完整代码 一.图的原理 图在我们的日常生活中,可谓是应用广泛,最长见的就有地图. 图可以是双向的,也可以是单向的. 图是一种由节点和边组成的数据结构. 节点&…

android FD_SET_chk问题定位

android FD_SET_chk问题定位 一、FD报错二、问题定位2.1 APM定位2.2 adb定位2.3. 代码获取FD数 三、FD优化 一、FD报错 App在运行中记录报错如下&#xff0c;FD_SET&#xff0c;这个问题大概是文件描述符&#xff08;File Descriptor&#xff0c;简称FD&#xff09;超过了最大…