You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中mqtt.Client构造函数的使用方法求助(附尝试代码)

使用mqtt.js的mqtt.Client()构造函数构建MQTT应用示例

我完全理解你想深入探索mqtt.js底层构造函数的需求——官方文档在这部分确实缺少直观的示例,我来给你提供完整的可运行代码,帮你理清mqtt.Client()的用法。

首先要明确:mqtt.connect()其实是mqtt.Client()的便捷封装,它会自动帮你完成实例化+连接的步骤;而直接用mqtt.Client()的话,你需要手动调用connect()方法来发起连接,这是两者最大的区别。

Client1 订阅端示例

var mqtt = require('mqtt')

// 实例化Client对象:参数依次是broker地址、clientId、配置选项
const client1 = new mqtt.Client('tcp://localhost:1883', 'client1', {
  clean: false, // 开启会话持久化
  // 可添加其他配置:比如 username: 'your-user', password: 'your-pass'
})

// 监听连接成功事件
client1.on('connect', () => {
  console.log('client1 已连接')
  // 订阅主题,注意配置项里的QoS是小写的`qos`
  client1.subscribe('presence', { qos: 2 })
  client1.subscribe('offline', { qos: 2 })
})

// 监听消息接收
client1.on('message', (topic, message) => {
  console.log(`client1 收到 [${topic}] 的消息:${message.toString()}`)
})

// 监听错误,排查问题必备
client1.on('error', (err) => {
  console.error('client1 发生错误:', err)
})

// 手动发起连接(这一步不能忘!)
client1.connect()

Client2 发布端(带遗嘱消息)示例

var mqtt = require('mqtt')

// 实例化带遗嘱配置的Client对象
const client2 = new mqtt.Client('tcp://localhost:1883', 'client2', {
  clean: false,
  will: {
    topic: 'offline',
    payload: 'off',
    qos: 2,
    retain: false // 可选,是否保留遗嘱消息
  }
})

client2.on('connect', () => {
  console.log('client2 已连接')
  // 发布消息,同样qos为小写
  client2.publish('presence', '{message:hello,id:1}', { qos: 2 })
})

client2.on('error', (err) => {
  console.error('client2 发生错误:', err)
})

// 手动发起连接
client2.connect()

关键注意点

  • 协议地址:MQTT默认用TCP协议,所以地址要写tcp://localhost:1883;如果用WebSocket连接,才用ws://localhost:8083/mqtt(不同broker的WebSocket路径可能有差异)
  • 配置项大小写:mqtt.js里的配置参数大多是小写,比如qos而不是你之前写的QoS,大写会被忽略哦
  • 手动连接:用mqtt.Client()必须调用connect()方法,否则不会发起连接请求
  • 错误监听:一定要加上error事件监听,连接失败、权限问题等都能在这里看到原因

内容的提问来源于stack exchange,提问作者mahendra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:27:47