MQTT.js快速上手指南:5分钟搭建你的第一个MQTT客户端
你是否还在为物联网设备间的通信烦恼?是否想快速实现设备数据的实时传输?本文将带你5分钟内完成MQTT客户端的搭建,无需复杂配置,轻松实现消息发布与订阅功能。读完本文,你将掌握MQTT.js的基本使用方法,能够构建简单的MQTT通信系统。
MQTT.js简介
MQTT.js是一个基于JavaScript的MQTT协议客户端库,支持Node.js和浏览器环境。它实现了MQTT协议的核心功能,包括连接管理、消息发布、订阅等,是构建物联网应用的理想选择。
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种轻量级的发布/订阅模式的消息传输协议,专为低带宽、不稳定网络环境下的物联网设备通信设计。
项目结构中,核心代码位于src/lib/client.ts,提供了MQTT客户端的主要实现。
安装MQTT.js
在开始之前,需要确保已安装Node.js环境。打开终端,执行以下命令安装MQTT.js:
npm install mqtt --save
如果需要全局安装,以便使用命令行工具,可以执行:
npm install mqtt -g
快速开始:发布与订阅消息
消息发布示例
创建一个简单的消息发布客户端,代码如下(对应文件:examples/client/simple-publish.js):
'use strict'
const mqtt = require('mqtt')
const client = mqtt.connect('mqtt://test.mosquitto.org')
client.on('connect', () => {
client.publish('presence', 'Hello MQTT!', (err) => {
if (!err) {
console.log('消息发布成功')
client.end()
}
})
})
消息订阅示例
创建一个消息订阅客户端,代码如下(对应文件:examples/client/simple-subscribe.js):
'use strict'
const mqtt = require('mqtt')
const client = mqtt.connect('mqtt://test.mosquitto.org')
client.subscribe('presence', (err) => {
if (!err) {
console.log('订阅成功')
}
})
client.on('message', (topic, message) => {
console.log(`收到消息:${message.toString()}`)
client.end()
})
运行示例
- 打开两个终端窗口
- 在第一个终端中运行订阅客户端:
node examples/client/simple-subscribe.js - 在第二个终端中运行发布客户端:
node examples/client/simple-publish.js
你将在订阅客户端的终端中看到"收到消息:Hello MQTT!"的输出。
MQTT.js核心API
连接到MQTT broker
使用mqtt.connect()方法创建客户端连接:
const mqtt = require('mqtt')
const client = mqtt.connect('mqtt://test.mosquitto.org', {
clientId: 'mqttjs_' + Math.random().toString(16).substr(2, 8),
clean: true,
connectTimeout: 4000,
username: 'username',
password: 'password',
reconnectPeriod: 1000,
})
连接选项说明:
clientId: 客户端ID,默认自动生成clean: 是否清除会话,默认为trueconnectTimeout: 连接超时时间(毫秒)username/password: 连接认证信息reconnectPeriod: 重连间隔时间(毫秒)
事件处理
MQTT.js客户端是一个事件发射器,常用事件包括:
// 连接成功事件
client.on('connect', (connack) => {
console.log('连接成功')
})
// 消息接收事件
client.on('message', (topic, message, packet) => {
console.log(`收到消息:${message.toString()}`)
})
// 连接错误事件
client.on('error', (error) => {
console.log('连接错误:', error)
})
// 重新连接事件
client.on('reconnect', () => {
console.log('正在重新连接...')
})
// 断开连接事件
client.on('close', () => {
console.log('连接已关闭')
})
发布消息
使用client.publish()方法发布消息:
client.publish('topic', 'message', {
qos: 0,
retain: false
}, (err) => {
if (err) {
console.log('发布失败:', err)
} else {
console.log('发布成功')
}
})
发布选项说明:
qos: 服务质量等级,0、1或2,默认为0retain: 是否保留消息,默认为false
订阅主题
使用client.subscribe()方法订阅主题:
client.subscribe('topic', { qos: 1 }, (err) => {
if (!err) {
console.log('订阅成功')
}
})
// 订阅多个主题
client.subscribe(['topic1', 'topic2'], (err) => {
if (!err) {
console.log('订阅多个主题成功')
}
})
命令行工具
MQTT.js提供了命令行工具,可以直接在终端中进行消息发布和订阅。
订阅主题
mqtt sub -t 'presence' -h 'test.mosquitto.org' -v
发布消息
mqtt pub -t 'presence' -h 'test.mosquitto.org' -m 'Hello from MQTT.js'
其中,-v选项表示详细输出,-h指定MQTT broker地址,-t指定主题,-m指定消息内容。
高级应用:WebSocket连接
MQTT.js支持通过WebSocket连接MQTT broker,适用于浏览器环境。示例代码位于examples/ws/client.js:
const mqtt = require('mqtt')
const client = mqtt.connect('ws://test.mosquitto.org:8080/mqtt')
client.on('connect', () => {
console.log('WebSocket连接成功')
client.subscribe('presence')
client.publish('presence', 'Hello MQTT over WebSocket')
})
client.on('message', (topic, message) => {
console.log(message.toString())
client.end()
})
总结
本文介绍了MQTT.js的基本使用方法,包括安装、消息发布与订阅、核心API以及命令行工具。通过这些内容,你可以快速搭建MQTT通信系统。
更多高级功能,如TLS/SSL加密连接、遗嘱消息、QoS级别等,可以参考官方文档和项目中的示例代码。
参考资源
通过以上资源,你可以进一步深入学习MQTT.js的使用和原理,构建更复杂的物联网应用。
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00
