Node.js 与 MQTT:构建下一代物联网应用

Node.js 与 MQTT:构建下一代物联网应用缩略图
本文目录
  1. 1. 1. 理解 Node.js 和 MQTT
  2. 2. 2. MQTT.js:构建 Node.js 中的 MQTT 应用
  3. 3. 3. 快速入门:Node.js MQTT 客户端
  4. 4. Node.js MQTT 使用
  5. 5. 连接 MQTT 服务器
  6. 6. 设置 MQTT Broker 的连接参数
  7. 7. 编写 MQTT 连接函数
  8. 8. 订阅主题
  9. 9. 消息发布
  10. 10. 完整代码
  11. 11. 测试
  12. 12. 4. 安全性考虑
  13. 13. 5. 扩展阅读:更多 Node.js 与 MQTT 的强大特性
  14. 14. 6. 结语

Node.js 与 MQTT:构建下一代物联网应用

在今天的数字化时代,物联网应用正迅速成为前沿技术。而在这方面,Node.js 和 MQTT 的组合无疑为开发者提供了一种高效、灵活的方式来构建应用。在这篇文章中,我们将详细探讨如何在 Node.js 中利用 MQTT 来开发物联网应用。

1. 理解 Node.js 和 MQTT

Node.js 不仅仅是一种服务端的 JavaScript 运行环境,它更是开发高性能、实时应用的绝佳选择。MQTT 则为我们提供了一个轻量、高效的消息通讯协议,特别适用于网络带宽有限或不稳定的环境中。

2. MQTT.js:构建 Node.js 中的 MQTT 应用

MQTT.js 是 Node.js 中最流行的 MQTT 客户端库,它为开发者提供了一个简单易用的 API 来开发 MQTT 客户端应用。

3. 快速入门:Node.js MQTT 客户端

首先,确保你的系统已经安装了 Node.js v14.14.0 或更高版本,接下来,我们将通过几个简单的步骤来搭建你的第一个 Node.js MQTT 客户端。

本项目使用 Node.js v14.14.0 进行开发和测试,读者可用如下命令确认 Node.js 的版本

node --version

v14.14.0

使用 npm 安装 MQTT.js 客户端库

# 新建项目
npm init -y

# 安装依赖
npm install mqtt --save

完成后我们在当前目录下新建一个 index.js 文件作为项目的入口文件,在该文件中来实现 MQTT 连接测试的完整逻辑。

Node.js MQTT 使用

连接 MQTT 服务器

本文将使用 EMQX 提供的 免费公共 MQTT 服务器,该服务基于 EMQX 的 MQTT 物联网云平台 创建。服务器接入信息如下:

  • Broker: broker.emqx.io(国内可以使用 broker-cn.emqx.io)
  • TCP Port: 1883
  • SSL/TLS Port: 8883

引入 MQTT.js 客户端库

注意:在 Node.js 环境中,导入依赖模块请使用 commonjs 规范

const mqtt = require('mqtt')

设置 MQTT Broker 的连接参数

设置 MQTT Broker 连接地址,端口以及 topic,这里我们使用 JavaScript 中的生成随机数的函数来生成客户端 ID。

const host = 'broker.emqx.io'
const port = '1883'
const clientId = `mqtt_${Math.random().toString(16).slice(3)}`

编写 MQTT 连接函数

我们使用刚才设置的连接参数来进行连接,连接的 URL 通过上面定义的 host、port 端口来进行拼接。然后调用 mqtt 模块内置的 connect 函数,连接成功后返回一个 Client 实例。

const connectUrl = `mqtt://${host}:${port}`

const client = mqtt.connect(connectUrl, {
  clientId,
  clean: true,
  connectTimeout: 4000,
  username: 'emqx',
  password: 'public',
  reconnectPeriod: 1000,
})

订阅主题

使用返回的 Client 实例的 on 方法来监听连接成功状态,并在连接成功后的回调函数中订阅 topic。此时我们连接成功后调用 Client 实例的 subscribe 方法订阅 /nodejs/mqtt 主题。

const topic = '/nodejs/mqtt'
client.on('connect', () => {
  console.log('Connected')
  client.subscribe([topic], () => {
    console.log(`Subscribe to topic '${topic}'`)
  })
})

订阅主题成功后,我们再使用 on 方法来监听接收消息的方法,当接受到消息时,我们可以在该方法的回调函数中获取到 topic 和 message 消息。

注意:回调函数中的 message 是 Buffer 类型,需要使用 toString 方法将其转化为字符串

client.on('message', (topic, payload) => {
  console.log('Received Message:', topic, payload.toString())
})

消息发布

完成上述的订阅主题和消息监听后,我们再来编写一个发布消息的方法。

注意:消息发布需要在 MQTT 连接成功以后,因此这里我们写到 Connect 成功的回调函数里

client.on('connect', () => {
  client.publish(topic, 'nodejs mqtt test', { qos: 0, retain: false }, (error) => {
    if (error) {
      console.error(error)
    }
  })
})

完整代码

服务器连接、主题订阅、消息发布与接收的代码。

const mqtt = require('mqtt')

const host = 'broker.emqx.io'
const port = '1883'
const clientId = `mqtt_${Math.random().toString(16).slice(3)}`

const connectUrl = `mqtt://${host}:${port}`
const client = mqtt.connect(connectUrl, {
  clientId,
  clean: true,
  connectTimeout: 4000,
  username: 'emqx',
  password: 'public',
  reconnectPeriod: 1000,
})

const topic = '/nodejs/mqtt'
client.on('connect', () => {
  console.log('Connected')
  client.subscribe([topic], () => {
    console.log(`Subscribe to topic '${topic}'`)
  })
  client.publish(topic, 'nodejs mqtt test', { qos: 0, retain: false }, (error) => {
    if (error) {
      console.error(error)
    }
  })
})
client.on('message', (topic, payload) => {
  console.log('Received Message:', topic, payload.toString())
})

项目完整代码请见:https://github.com/emqx/MQTT-Client-Examples/tree/master/mqtt-client-Node.js

测试

我们在 package.json 文件中的脚本字段中添加一行启动脚本。

"scripts": {
  "start": "node index.js"
}

然后就可以简单使用 npm start 来运行项目。

npm start

运行后我们可以看到控制的输出信息如下:

Node.js 与 MQTT:构建下一代物联网应用插图

4. 安全性考虑

当涉及到物联网应用时,安全性是首要考虑的问题。确保使用 TLS/SSL 加密来保障你的数据安全。

5. 扩展阅读:更多 Node.js 与 MQTT 的强大特性

除了基本功能外,Node.js 和 MQTT 还有许多强大的特性等待你去发掘,如 QoS、消息保留、遗嘱消息等。

6. 结语

随着物联网应用的持续发展,Node.js 结合 MQTT 为开发者提供了一个强大、灵活且高效的工具来满足日益增长的需求。而你,作为一名开发者,现在已经掌握了使用这两个工具构建下一代物联网应用的知识。不要等待,开始你的 MQTT 之旅吧!

本文旨在为读者提供实际的价值,帮助开发者快速、高效地开发物联网应用。感谢你的阅读,期待你的反馈和建议。

技术术语(共 8 个)—— 点击展开
MQTT轻量级物联网消息传输协议,基于发布/订阅模式,适合低带宽不稳定网络
BrokerMQTT 代理服务器,负责接收发布消息并分发给订阅者
EMQX开源 MQTT Broker,常用于物联网海量连接与集群场景
QoS服务质量等级,0 最多一次 / 1 至少一次 / 2 恰好一次
TopicMQTT 主题,消息路由的层级字符串,支持通配符 + 与 #
订阅客户端向 Broker 注册感兴趣的主题以接收消息
发布客户端向指定主题发送消息
遗嘱消息Will 消息,客户端异常断开时 Broker 代为发布的消息
来源/工具信息 —— 点击展开
来源 MQTT中文网(mqtt.cn) —— 国内领先的MQTT通信协议技术社区 分类 MQTT 编程 / 学习 字数 3234 字 · 阅读约 9 分钟 更新 2024-04-15 永久链接 https://www.mqtt.cn/930.html
推荐工具:MQTT调试助手 微信小程序
MQTT中文网官方推出的MQTT调试工具,支持 MQTT 3.1.1/5.0 实时连接调试、主题订阅、消息收发监控与报文分析。 无需安装,微信搜索「MQTT调试助手」即可使用。 电脑端入口:https://www.mqtt.cn/mqtttool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 mqtt.cn
📝 作者声明
本文由 MQTT中文网技术团队 原创撰写,内容基于实际项目案例与技术文档,力求为读者提供准确、实用的参考信息。
把这篇资料用于真实项目?

进入工具中心进行报文解析、CRC 校验和设备调试,或提交需求获取选型与接入建议。

工程师会员

把这篇文章变成可执行的调试资料

开通后可使用高级报文解析、资料包下载、代码示例、工程案例和优先技术支持,适合真实项目交付。

高级工具不限次
资料包与代码包
完整工程案例库
优先技术支持入口