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 代理(如 Mosquitto、EMQX 或 HiveMQ):
const mqtt = require('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.subscribe('topic/test', (err) => {
if (err) {
console.error('Subscription error:', err);
} else {
console.log('Subscribed to topic/test');
}
});
client.on('message', (topic, message) => {
console.log(`Received message on ${topic}: ${message.toString()}`);
});
发布消息
向指定主题发布消息:
client.publish('topic/test', 'Hello MQTT', (err) => {
if (err) {
console.error('Publish error:', err);
} else {
console.log('Message published');
}
});
断开连接
关闭客户端连接:
client.end();
使用 MQTT 5.0 功能
MQTT.js 支持部分 MQTT 5.0 功能,例如属性设置:
const client = mqtt.connect('mqtt://test.mosquitto.org', {
protocolVersion: 5,
properties: {
sessionExpiryInterval: 3600, // 会话过期时间(秒)
},
});
浏览器端使用
在浏览器中使用 MQTT.js 需要通过 CDN 或打包工具引入:
<script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script>
<script>
const client = mqtt.connect('wss://test.mosquitto.org:8081');
client.on('connect', () => {
console.log('Connected to MQTT broker');
});
</script>
安全连接
配置 TLS/SSL 连接:
const fs = require('fs');
const client = mqtt.connect('mqtts://test.mosquitto.org', {
key: fs.readFileSync('client-key.pem'),
cert: fs.readFileSync('client-cert.pem'),
ca: fs.readFileSync('server-ca.pem'),
});
断线重连
启用自动重连功能:
const client = mqtt.connect('mqtt://test.mosquitto.org', {
reconnectPeriod: 5000, // 重连间隔(毫秒)
});
完整示例
以下是一个完整的 MQTT.js 示例,包含连接、订阅、发布和断开操作:

const mqtt = require('mqtt');
const client = mqtt.connect('mqtt://test.mosquitto.org');
client.on('connect', () => {
console.log('Connected to MQTT broker');
client.subscribe('topic/test');
client.publish('topic/test', 'Hello MQTT');
});
client.on('message', (topic, message) => {
console.log(`Received message on ${topic}: ${message.toString()}`);
client.end();
});
client.on('error', (err) => {
console.error('Error:', err);
});
通过以上方法,可以快速实现 MQTT 通信功能。MQTT.js 的文档和示例可在其 GitHub 仓库 中找到更多细节。






