# 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)- 保证送达且不重复
# 工作流程
- 连接建立:客户端与Broker建立TCP连接,发送CONNECT报文
- 身份认证:可选用户名/密码认证
- 订阅主题:客户端发送SUBSCRIBE报文订阅主题
- 发布消息:发布者向主题发布消息
- 消息路由:Broker根据订阅关系将消息转发给订阅者
- 消息确认:根据QoS级别进行消息确认
- 连接保活:通过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. 智能家居
- 设备联动控制
- 场景模式切换
- 能源管理
上一篇: 下一篇:
本章目录