# MQTT

# 是什么

是一种基于发布/订阅模式的轻量级消息传输协议,专为低带宽、高延迟或不稳定的网络环境设计。

# 核心组件

# 1.Broker(代理服务器)

  • 消息中转中心
  • 负责消息路由、存储和转发
  • 维护客户端连接和订阅关系

# 2. Publisher(发布者)

  • 消息生产者
  • 向指定主题发布消息
  • 不关心谁订阅了主题

# 3. Subscriber(订阅者)

  • 消息消费者
  • 订阅感兴趣的主题
  • 接收匹配主题的消息

# 4. Topic(主题)

  • 消息的路由标识符
  • 采用分层结构(如:home/livingroom/temperature)
  • 支持通配符(+ 单级,* 多级)

# 服务质量等级

  • QoS 0:最多一次(At most once)- 尽力而为,可能丢失
  • QoS 1:至少一次(At least once)- 保证送达,可能重复
  • QoS 2:恰好一次(Exactly once)- 保证送达且不重复

# 工作流程

  1. 连接建立:客户端与Broker建立TCP连接,发送CONNECT报文
  2. 身份认证:可选用户名/密码认证
  3. 订阅主题:客户端发送SUBSCRIBE报文订阅主题
  4. 发布消息:发布者向主题发布消息
  5. 消息路由:Broker根据订阅关系将消息转发给订阅者
  6. 消息确认:根据QoS级别进行消息确认
  7. 连接保活:通过PINGREQ/PINGRESP维持连接

# 方法

connect

// 带选项的连接
const options = {
  clientId: 'my-client',
  username: 'admin',
  password: 'password',
  keepalive: 60,           // 心跳间隔(秒)
  clean: true,            // 清理会话
  protocolVersion: 5,     // MQTT 5.0
  properties: {           // MQTT 5.0属性
    sessionExpiryInterval: 3600
  }
}
client.connect(options)

disconnect

client.on('disconnect', () => {})

end

client.end(false, () => {})

message

error

offline: 离线

reconnect:重连

client.on('offline', () => {
  console.log('网络离线,尝试重连...')
  setTimeout(() => {
    client.reconnect()
  }, 3000)
})

subscribe:订阅

client.subscribe('home/livingroom/temperature', { qos: 1 }, (err, granted) => {})

unsubscribe:取消订阅

client.unsubscribe('home/livingroom/temperature', (err) => {})

publish:发布

client.publish('home/livingroom/temperature', '25.5')
client.publish('home/livingroom/sensor', JSON.stringify(data))

handleMessage:消息处理

client.handleMessage = function (packet, callback) {}

# 应用场景

# 1. 物联网设备通信

  • 传感器数据采集
  • 设备状态监控
  • 远程控制指令下发

# 2. 移动应用推送

  • 即时消息推送
  • 实时数据更新
  • 多端同步

# 3. 车联网

  • 车辆状态上报
  • 远程诊断
  • OTA升级

# 4. 智能家居

  • 设备联动控制
  • 场景模式切换
  • 能源管理
本章目录