一、MQTT、TCP、HTTP区别
协议类型 | 模式 | 适用场景 | 特性 | 连接方式 |
---|---|---|---|---|
MQTT | 发布/订阅 | 物联网设备间的消息传输 | 低宽带消耗,消息持久化 | 持久连接 |
TCP | 请求/响应 | 对数据传输可靠性要求高的场景 | 面向连接、可靠性、流式传输 | 需要建立连接 |
HTTP | 请求/响应 | Web页面的数据传输和交互 | 超文本传输、多种请求方法 | 短连接 |
二、MQTT协议介绍
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上。通常用于机器与机器(M2M)通信和物联网(IoT)。
三、MQTT实现方式
3.1 发布订阅
MQTT协议中有三种身份: 发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。 其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。
MQTT传输的消息分为: 主题(Topic) 和 负载(payload)两部分:
- Topic: 可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload)\
- payload: 可以理解为消息的内容,是指订阅者具体要使用的内容
3.2 QoS
QoS 0
这一级别会发生消息丢失或重复,消息发布依赖于底层TCP/IP网络。即:<=1
QoS 1
QoS 1 承诺消息将至少传送一次给订阅者
QoS 2
使用 QoS 2,我们保证消息仅传送到目的地一次。为此,带有唯一消息 ID 的消息会存储两次,首先来自发送者,然后是接收者。QoS 级别 2 在网络中具有最高的开销,因为在发送方和接收方之间需要两个流。
3.3 数据包结构
- 固定头(Fixed header),存在于所有MQTT数据包中,表示数据包类型及数据包的分组类标识;
- 可变头(Variable header),存在于部分MQTT数据包中,数据包类型决定了可变头是否存在及其具体内容;
- 消息体(Payload),存在于部分MQTT数据包中,表示客户端收到的具体内容;