首页 前端知识 MQTT 的使用

MQTT 的使用

2024-04-22 09:04:30 前端知识 前端哥 510 871 我要收藏

文章目录

一、为什么要使用 MQTT

二、使用 MQTT

1. 二次封装 mqtt

2. 使用封装的 mqtt


一、为什么要使用 MQTT

MQTT 是一种基于发布/订阅模式的轻量级物联网消息传输协议,可以用极少的代码和带宽为联网设备提供实时可靠的消息服务,它广泛应用于物联网、移动互联网、智能硬件、车联网、电力能源等行业。

当我们需要和物联网端进行交互时,就需要用到 MQTT

二、使用 MQTT

npm i -S mqtt

前端想要使用 MQTT,需要先下载 mqtt 这个依赖,该库支持浏览器环境和 Node.js 环境,浏览器环境只支持 WebSocket 连接,而 Node.js 环境支持 WebSocket 和 MQTT 连接,下面以浏览器为例

1. 二次封装 mqtt

下载好 mqtt 依赖后,先进行简单的二次封装,可以使用 Class 或 Function 进行二次封装,以下以 Function 封装为例

import * as mqtt from "mqtt/dist/mqtt.min";
​
export default function (
  url: string, // 连接地址
  onMessage: (tioic: string, msg: any) => void, // 收到信息后的回调
  theme?: string // 需要订阅的主题
) {
  // 创建连接
  const client = mqtt.connect(url);
  // 值为1是,断开连接 
  client.close = 0;
​
    // 连接成功回调
  client.on("connect", (e: unknown) => {
    console.log("连接成功");
​
    // 订阅
    if (theme) {
      client.subscribe(theme, { qos: 0 }, (error: unknown)=> {
        if (error) {
            console.log("订阅失败", error);
        } else {
            console.log("订阅成功");
        }
  });
    }
​
    // 监听信息,topic:收到信息的主题;message:收到的数据
    client.on("message", (topic: string, message: any) => {
      // 收到信息后,执行回调,将数据和
      onMessage(topic, info);
​
      // 取消订阅
      if (client.close && theme) {
        console.log("取消订阅");
        client.unsubscribe(theme, { qos: 0 }, (error: unknown) => {
            if (error) {
            console.log("取消订阅失败", error);
            }
        });
      }
      return;
    });
​
    // 重新连接
    client.on("reconnect", (err: unknown) => {
      console.log("正在重新连接", err);
    });
​
    // 连接失败
    client.on("error", (err: unknown) => {
      console.log("连接失败");
    });
  });
​
  return client;
}

2. 使用封装的 mqtt

// 引入 二次封装的 mqtt
import mqtt from "@/utils/mqtt";
​
const mqttMsg = (tioic: string, msg: unknown)=>{
    console.log("收到的数据",{tioic,msg});
}
​
const client = mqtt(
    "ws://127.0.0.1:3100", // 连接的ip和端号
    mqttMsg, // 回调函数
    "zs/channel/live" // 订阅的主题
  );
​
setTimeout(() => {
  client.close = 1 // 断开 mqtt 连接
}, 10000);

转载请注明出处或者链接地址:https://www.qianduange.cn//article/5677.html
标签
评论
发布的文章

CSS(8)空间转换 动画

2024-04-29 12:04:29

CSS介绍(4)--背景属性

2024-04-29 12:04:26

Web学习记录---CSS(1)

2024-04-29 12:04:17

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!