文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MQTT.js入门使用的方法是什么

2023-07-06 04:09

关注

这篇文章主要介绍“MQTT.js入门使用的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MQTT.js入门使用的方法是什么”文章能帮助大家解决问题。

简介

MQTT.js 是一个开源的 MQTT 协议的客户端库,使用 JavaScript 编写,主要用于 Node.js 和 浏览器环境中。是目前 JavaScript 生态中使用最为广泛的 MQTT 客户端库。

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

由于 JavaScript 单线程特性,MQTT.js 是全异步 MQTT 客户端,MQTT.js 支持 MQTT/TCP、MQTT/TLS、MQTT/WebSocket,在不同运行环境支持的度如下:

注意:不同环境里除了少部分连接参数不同,其他 API 均是相同的。且在 MQTT.js v3.0.0 及以上版本后,已经完整支持到 MQTT 5.0。

安装

使用 npm 或 yarn 安装

npm install mqtt --save# 或使用 yarnyarn add mqtt

注意:如果您的 Node 环境是 v12 或 v14 及以上版本,请使用 MQTT.js 4.0.0 及以上版本

使用 CDN 安装

浏览器环境中,我们还可以使用 CDN 的方式引入 MQTT.js。MQTT.js 的 bundle 包通过 http://unpkg.com 管理,我们可以直接添加 unpkg.com/mqtt/dist/mqtt.min.js 来进行使用。

<script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script><script>  // 将在全局初始化一个 mqtt 变量  console.log(mqtt)</script>

全局安装

除了上述的安装方式外,MQTT.js 还提供了全局安装的方式,使用命令行工具来完成 MQTT 的连接、发布和订阅等。

npm install mqtt -g

我们会在下文中的一些使用教程中详细描述如何使用 MQTT.js 的命令行工具。

使用

本文将使用 EMQX Cloud 提供的 免费公共 MQTT 服务器 作为本次测试的 MQTT 服务器地址,服务器接入信息如下:

更多详情请访问 EMQX Cloud 官网,或查看 EMQX Cloud 文档。

简单例子

我们简单编写一段代码实现连接到 EMQX Cloud 并完成订阅主题、收发消息的简单例子。因为在浏览器环境中仅支持使用 WebSocket 连接,所以我们将使用在浏览器环境和 Node.js 环境两种不同的连接参数来完成连接。不过除连接地址外,其它参数均是相同的,因此读者可根据自己的实际情况选择使用。

const mqtt = require('mqtt')const url = 'ws://broker.emqx.io:8083/mqtt'// const url = 'mqtt://broker.emqx.io:1883'// 创建客户端实例const options = {  // Clean session  clean: true,  connectTimeout: 4000,  // 认证信息  clientId: 'emqx_test',  username: 'emqx_test',  password: 'emqx_test',}const client = mqtt.connect(url, options)client.on('connect', function () {  console.log('Connected')  // 订阅主题  client.subscribe('test', function (err) {    if (!err) {      // 发布消息      client.publish('test', 'Hello mqtt')    }  })})// 接收消息client.on('message', function (topic, message) {  // message is Buffer  console.log(message.toString())  client.end()})

命令行

在全局安装完 MQTT.js 后,我们同样可以使用命令行工具来完成主题订阅消息发布接收的动作。

示例连接到 broker.emqx.io 并订阅 testtopic/# 主题:

mqtt sub -t 'testtopic/#' -h 'broker.emqx.io' -v

示例连接到 broker.emqx.io 并向 testtopic/hello 主题发送消息

mqtt pub -t 'testtopic/hello' -h 'broker.emqx.io' -m 'from MQTT.js'

如需使用功能更加全面的 MQTT 命令行工具,可参考使用 MQTT X CLI。

API 介绍

mqtt.connect([url], options)

连接到指定的 MQTT Broker 的函数,并始终返回一个 Client 对象。第一个参数传入一个 URL 值,URL 可以是以下协议:mqttmqttstcptlswswss。URL 也可以是一个由 URL.parse() 返回的对象。然后再传入一个 Options 对象,用于配置 MQTT 连接时的选项。当使用 WebSocket 连接时需要注意地址后是否需要加上一个 path,例如 /mqtt

下面列举一些常用的 Options 对象中的属性值:

Client 事件

当连接成功后,返回的 Client 对象可通过 on 方法监听多个事件,业务逻辑可在监听的回调函数中完成。以下列举一些常用的事件:

connect

当连接成功时触发,参数为 connack

client.on('connect', function (connack) {  console.log('Connected')})

reconnect

当断开连接后,经过重连间隔时间重新自动连接到 Broker 时触发

client.on('reconnect', function () {  console.log('Reconnecting...')})

close

在断开连接以后触发

client.on('close', function () {  console.log('Disconnected')})

disconnect

在收到 Broker 发送过来的断开连接的报文时触发,参数 packet 即为断开连接时接收到的报文,MQTT 5.0 中的功能

client.on('disconnect', function (packet) {  console.log(packet)})

offline

当客户端下线时触发

client.on('offline', function () {  console.log('offline')})

error

当客户端无法成功连接时或发生解析错误时触发,参数 error 为错误信息

client.on('error', function (error) {  console.log(error)})

message

当客户端收到一个发布过来的 Payload 时触发,其中包含三个参数,topic、payload 和 packet,其中 topic 为接收到的消息的 topic,payload 为接收到的消息内容,packet 为 MQTT 报文信息,其中包含 QoS、retain 等信息

client.on('message', function (topic, payload, packet) {  // Payload is Buffer  console.log(`Topic: ${topic}, Message: ${payload.toString()}, QoS: ${packet.qos}`)})

Client 方法

Client 除监听事件外,也内置一些方法,用来进行发布订阅的操作等,以下列举一些常用的方法。

Client.publish(topic, message, [options], [callback])

向某一 topic 发布消息的函数方法,其中包含四个参数:

// 向 testtopic 主题发送一条 QoS 为 0 的测试消息client.publish('testtopic', 'Hello, MQTT!', { qos: 0, retain: false }, function (error) {  if (error) {    console.log(error)  } else {    console.log('Published')  }})

Client.subscribe(topic/topic array/topic object, [options], [callback])

订阅一个或者多个 topic 的方法,当连接成功需要订阅主题来获取消息,该方法包含三个参数:

// 订阅一个名为 testtopic QoS 为 0 的 Topicclient.subscribe('testtopic', { qos: 0 }, function (error, granted) {  if (error) {    console.log(error)  } else {    console.log(`${granted[0].topic} was subscribed`)  }})

Client.unsubscribe(topic/topic array, [options], [callback])

取消订阅单个主题或多个主题,该方法包含三个参数:

// 取消订阅名为 testtopic 的 Topicclient.unsubscribe('testtopic', function (error) {  if (error) {    console.log(error)  } else {    console.log('Unsubscribed')  }})

Client.end([force], [options], [callback])

关闭客户端,该方法包含三个参数:

client.end()

关于“MQTT.js入门使用的方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯