Appearance
mqtt
mqtt是一个用于实现 MQTT 协议的客户端库,适用于 Node.js 和浏览器。它支持发布/订阅模式,适合物联网(IoT)应用和实时消息传递。
安装
bash
npm install mqtt --save使用
- 创建一个 MQTT 客户端实例
javascript
import mqtt from 'mqtt';
const config = {
host: 'mqtt://localhost', // MQTT 服务器地址
port: '1883', // 端口
clientId: 'mqttjs_' + Math.random().toString(16).substr(2, 8), // 客户端 ID
clean: true, // 是否清除 session
connectTimeout: 30 * 1000, // 连接超时时间
username: 'username', // 用户名
password: 'password', // 密码
reconnectPeriod: 1000, // 重连间隔
keepalive: 60, // 心跳时间
qos: 2 // 服务质量(0: 最多一次,1: 至少一次,2: 只有一次)
};
const client = mqtt.connect(`${config.host}:${config.port}`, {
clientId: config.clientId,
clean: config.clean,
connectTimeout: config.connectTimeout,
username: config.username,
password: config.password,
reconnectPeriod: config.reconnectPeriod,
keepalive: config.keepalive
});
client.on('connect', () => {
console.log('成功连接到 MQTT 服务器');
});
client.on('reconnect', () => {
console.log('重新连接到 MQTT 服务器');
});
client.on('error', (err) => {
console.error('连接错误:', err);
});
client.on('close', () => {
console.log('与 MQTT 服务器的连接已关闭');
});- 发布消息
javascript
const publishMessage = (topic, message) => {
client.publish(topic, message, { qos: config.qos }, (err) => {
if (err) {
console.error('消息发送失败:', err);
} else {
console.log('消息发送成功');
}
});
};
publishMessage('test/topic', 'Hello MQTT!');- 订阅消息
javascript
const subscribeMessage = (topic) => {
client.subscribe(topic, (err) => {
if (!err) {
console.log(`成功订阅主题: ${topic}`);
client.publish('presence', 'Hello mqtt');
} else {
console.error('订阅失败:', err);
}
});
client.on('message', (t, message) => {
if (topic === t) {
console.log('接收到的消息:', message.toString());
}
});
};
subscribeMessage('test/topic');- 断开连接
javascript
client.end(() => {
console.log('已断开与 MQTT 服务器的连接');
})