mqtt协议理解

1. 应用场景: 低带宽,数据头尽可能小。

2. 属于应用层协议,采用TCP承载。

3. 采用 发布-> (代理)  -> 订阅模式(利用中间代理实现了异步通讯),发布方发送的相当于是个广播信息, 设置一个主题。订阅方根据主题选择自己订阅的报文。 

不过是发布方还是订阅方都看作broker(代理)的客户端,采用mqtt协议通讯。 

4. 报文结构

MQTT-Standard-Packet

 控制头(1字节)包含了包类型和flags

 包类型:

  • CONNECT:客户端连接到MQTT代理
  • CONNACK:连接确认
  • PUBLISH:新发布消息
  • PUBACK:新发布消息确认,是QoS 1给PUBLISH消息的回复
  • PUBREC:QoS 2消息流的第一部分,表示消息发布已记录
  • PUBREL:QoS 2消息流的第二部分,表示消息发布已释放
  • PUBCOMP:QoS 2消息流的第三部分,表示消息发布完成
  • SUBSCRIBE:客户端订阅某个主题
  • SUBACK:对于SUBSCRIBE消息的确认
  • UNSUBSCRIBE:客户端终止订阅的消息
  • UNSUBACK:对于UNSUBSCRIBE消息的确认
  • PINGREQ:心跳
  • PINGRESP:确认心跳
  • DISCONNECT:客户端终止连接前优雅地通知MQTT代理

flag字段:

MQTT-Message-Flags

 

针对消息发布, flags控制的是qos(quality of service) 分为3类

  • 级别0:尽力而为。消息发送者会想尽办法发送消息,但是遇到意外并不会重试。
  • 级别1:至少一次。消息接收者如果没有知会或者知会本身丢失,消息发送者会再次发送以保证消息接收者至少会收到一次,当然可能造成重复消息。
  • 级别2:恰好一次。保证这种语义肯待会减少并发或者增加延时,不过丢失或者重复消息是不可接受的时候,级别2是最合适的。

6. broker 服务器: mosquitto  客户端 paho-mqtt

mqtt python 客户端使用方法
Client(client_id=””, clean_session=True, userdata=None, protocol=MQTTv311, transport=”tcp”)

client_id是唯一字段,使用connect 建立连接

connect(host, port=1883, keepalive=60, bind_address="")  # 封装了请求连接报文

发布推送

publish(topic, payload=None, qos=0, retain=False)  # retain 是在报文控制头的flag中, qos是服务质量设置

订阅话题

subscribe(topic, qos=0) 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值