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

在Node.js服务器(Mosquitto代理)中获取MQTT消息头及客户端设备信息

获取MQTT消息头与客户端详情(Node.js + Mosquitto)

嘿,我来帮你搞定这个需求!你用的mqtt.js库其实在message事件里藏着你需要的所有信息,只是需要用上回调的第三个参数——MQTT报文对象(packet)。下面一步步拆解实现:


1. 提取MQTT消息头信息

修改你的message事件回调,加上第三个参数packet,这个对象里包含了所有MQTT协议层面的报文头细节,比如QoS等级、保留位、报文ID这些核心字段:

client.on('message', function (topic, message, packet) {
  // 先打印完整报文对象,看看里面都有啥
  console.log('完整MQTT报文信息:', packet);

  // 提取几个常用的消息头字段示例:
  const qosLevel = packet.qos; // 消息的QoS等级(0/1/2)
  const isRetained = packet.retain; // 消息是否被Broker保留
  const msgId = packet.messageId; // 报文ID(只有QoS 1/2的消息才有这个值)
  const isDuplicate = packet.dup; // 是否是重复发送的报文

  console.log(`QoS等级: ${qosLevel}, 保留状态: ${isRetained}, 报文ID: ${msgId}`);
});

2. 获取发送方的客户端/设备/浏览器详情

要拿到发送消息的客户端的详细信息(比如客户端ID、浏览器UA、设备型号),需要分两步走:

第一步:配置Mosquitto允许传递元数据

首先得修改Mosquitto的配置文件(比如mosquitto.conf),开启用户属性传递,这样Broker才会把客户端的连接信息附加到消息里:

# 启用用户属性传递,支持MQTT 5.0的客户端属性
user_properties true

第二步:从报文对象里提取客户端信息

在message回调的packet对象中,properties字段(MQTT 5.0标准)会包含发送方的客户端ID、用户代理等信息;如果是自定义的设备信息,还可以从userProperties里获取:

client.on('message', function (topic, message, packet) {
  // 获取发送方的客户端ID
  const senderClientId = packet.properties?.clientId;
  // 获取浏览器/设备的用户代理信息(如果发送方设置了的话)
  const userAgentInfo = packet.properties?.userAgent;
  // 如果是设备端自定义的属性,比如设备型号、固件版本,从这里取
  const deviceProps = packet.userProperties;

  console.log(`发送消息的客户端ID: ${senderClientId}`);
  console.log(`客户端UA信息: ${userAgentInfo}`);
  if (deviceProps) {
    console.log('自定义设备属性:', deviceProps);
  }
});

额外小技巧:

如果是浏览器端的MQTT客户端,你可以在连接时主动把浏览器的UA信息传过去:

const browserMqttClient = mqtt.connect('ws://your-mosquitto-ws-address', {
  username: 'xxxx',
  password: 'xxxx',
  properties: {
    userAgent: navigator.userAgent // 直接把浏览器的UA传给Broker
  }
});

对于IoT设备,你可以在连接时通过userProperties参数传递设备型号、固件版本等自定义信息,这样服务器端就能直接拿到啦。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:25:33