Node.js结合MQTT实现客户端消息订阅与发布(极简实操)
·
在物联网、实时通信场景中,MQTT协议因轻量、低功耗的特点被广泛应用,而Node.js凭借高效的异步I/O,非常适合快速开发MQTT客户端。本文将基于mqtt.js库,实现MQTT客户端的连接、消息订阅、发布全流程,代码可直接复制运行,新手也能快速上手。
一、环境准备
1. 初始化Node.js项目:npm init -y
2. 安装依赖包:npm install mqtt --save(mqtt.js是Node.js生态中最常用的MQTT客户端库,支持MQTT 3.1.1/5.0协议)
3. 准备MQTT服务器:可使用公共MQTT服务器(如mqtt://test.mosquitto.org),也可本地搭建EMQ X服务器,无需额外配置,直接可用。
二、完整代码实现(订阅+发布)
// 引入mqtt库
const mqtt = require('mqtt');
// 1. 连接MQTT服务器(公共服务器,无需账号密码)
const client = mqtt.connect('mqtt://test.mosquitto.org', {
clientId: 'nodejs_mqtt_client_' + Math.random().toString(16).substr(2, 8), // 随机客户端ID,避免冲突
clean: true, // 断开连接后清除会话
connectTimeout: 4000 // 连接超时时间
});
// 2. 连接成功回调
client.on('connect', () => {
console.log('MQTT客户端连接成功');
// 订阅主题(自定义主题,如:nodejs/mqtt/demo)
const topic = 'nodejs/mqtt/demo';
client.subscribe(topic, (err) => {
if (!err) {
console.log(`成功订阅主题:${topic}`);
// 订阅成功后,发布一条测试消息
client.publish(topic, 'Hello MQTT! 我是Node.js客户端', (err) => {
if (!err) {
console.log('消息发布成功');
}
});
}
});
});
// 3. 接收订阅的消息
client.on('message', (topic, message) => {
console.log(`收到主题【${topic}】的消息:${message.toString()}`);
});
// 4. 处理连接错误
client.on('error', (err) => {
console.error('MQTT连接失败:', err);
client.end(); // 错误时断开连接
});
// 5. 断开连接回调
client.on('close', () => {
console.log('MQTT客户端已断开连接');
});
三、代码说明与扩展
1. 核心逻辑:通过mqtt.connect()建立连接,connect事件触发后执行订阅和发布操作,message事件监听接收消息,异常场景(错误、断开)做兜底处理。
2. 扩展技巧:若使用带账号密码的MQTT服务器,可在connect配置中添加username和password字段;如需持久化会话,将clean设为false;可订阅多个主题,只需多次调用client.subscribe()。
3. 运行测试:执行node mqtt-client.js,即可看到连接、订阅、发布、接收消息的完整日志,可多开几个终端运行,测试消息互通。
更多推荐



所有评论(0)