Skip to content
On this page

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 服务器的连接');
})

要保持清醒 永远不抱有意外的幻想 凭空的期待最要命