MQTT js实现
MQTT.js 实现方法
MQTT.js 是一个基于 Node.js 的 MQTT 协议客户端库,支持 MQTT 3.1.1 和部分 MQTT 5.0 特性。以下是使用 MQTT.js 实现 MQTT 通信的详细方法。
安装 MQTT.js
通过 npm 或 yarn 安装 MQTT.js 库:
npm install mqtt
# 或
yarn add mqtt
连接到 MQTT 代理
使用 MQTT.js 连接到 MQTT 代理服务器(如 Mosquitto、EMQX 等):
const mqtt = require('mqtt');
// 连接到 MQTT 代理
const client = mqtt.connect('mqtt://test.mosquitto.org');
client.on('connect', () => {
console.log('Connected to MQTT broker');
});
client.on('error', (err) => {
console.error('Connection error:', err);
});
订阅主题
订阅一个或多个主题并接收消息:
client.on('connect', () => {
// 订阅主题
client.subscribe('test/topic', (err) => {
if (!err) {
console.log('Subscribed to test/topic');
}
});
});
// 接收消息
client.on('message', (topic, message) => {
console.log(`Received message on ${topic}: ${message.toString()}`);
});
发布消息
向指定主题发布消息:
client.on('connect', () => {
// 发布消息
client.publish('test/topic', 'Hello MQTT', (err) => {
if (!err) {
console.log('Message published');
}
});
});
断开连接
手动断开与 MQTT 代理的连接:
client.end(); // 断开连接
使用 SSL/TLS 连接
如果需要通过 SSL/TLS 加密连接,可以配置证书和密钥:
const fs = require('fs');
const mqtt = require('mqtt');
const options = {
key: fs.readFileSync('path/to/client-key.pem'),
cert: fs.readFileSync('path/to/client-cert.pem'),
ca: fs.readFileSync('path/to/ca-cert.pem'),
};
const client = mqtt.connect('mqtts://secure-broker.example.com', options);
高级配置
MQTT.js 支持多种配置选项,例如设置客户端 ID、用户名、密码等:
const options = {
clientId: 'my-client-id',
username: 'username',
password: 'password',
clean: true, // 是否清除会话
keepalive: 60, // 心跳间隔(秒)
};
const client = mqtt.connect('mqtt://test.mosquitto.org', options);
错误处理
监听和处理连接及消息传输中的错误:
client.on('error', (err) => {
console.error('MQTT error:', err);
});
client.on('offline', () => {
console.log('Client is offline');
});
client.on('reconnect', () => {
console.log('Reconnecting...');
});
完整示例
以下是一个完整的 MQTT.js 示例,包含连接、订阅、发布和断开操作:

const mqtt = require('mqtt');
const client = mqtt.connect('mqtt://test.mosquitto.org');
client.on('connect', () => {
console.log('Connected to broker');
// 订阅主题
client.subscribe('test/topic', (err) => {
if (!err) {
console.log('Subscribed to test/topic');
// 发布消息
client.publish('test/topic', 'Hello MQTT');
}
});
});
client.on('message', (topic, message) => {
console.log(`Received message on ${topic}: ${message.toString()}`);
});
client.on('error', (err) => {
console.error('Error:', err);
});
// 5 秒后断开连接
setTimeout(() => {
client.end();
console.log('Disconnected');
}, 5000);
通过以上方法,可以快速实现基于 MQTT.js 的 MQTT 通信功能。






