http vs mqtt 云架构网关协议的选择

网络连接协议

为了服务器减压,通常需要需要选择轻量级的协议。
和服务器链接有哪些协议呢?
占用网络资源较多的协议:SAMBA,NFS,FTP,TFTP
占用资源较少的协议:MQTT, HTTP
MQTT和HTTP都是基于TCP协议的应用层协议。
在 MQTT和HTTP中,选择哪个协议呢?

- -HTTP vs MQTT

http vs mqtt 云架构网关协议的选择
http vs mqtt 云架构网关协议的选择

MQTT协议(以V3.1.1为例)

Message Queuing Telemetry Transport
https://github.com/mcxiaoke/mqtt
MQTT报文格式
http vs mqtt 云架构网关协议的选择
4>= K >=1,即fixed header 长度为2~5 bytes

- - fixed header

Byte1:
bit7 ~ bit4为报文类型,bit3 ~ bit0为相应的标志位。

Byte2~Byte5
为剩余长度字段(Remaining Length),它表示的是MQTT控制报文后面所剩余的字节数,所剩余的字节数不包含剩余长度字段本身。
每个字节的最高位为1表示延续位(continuation bit) ,表示后续字节为属于剩余长度字段。
http vs mqtt 云架构网关协议的选择
由此推理payload理论上,最大值为2^28=256MB。

- - variable header

不同类型报文,其格式和内容不同。
通常情况下,variable header部分,都会包含2字节的Packet Identifier。

- - payload

MQTT 传输流程

http vs mqtt 云架构网关协议的选择

http协议

HyperText Transfer Protocol分为请求报文和响应报文两种。
http传送的都是一堆ASCII码

- - http请求报文

http vs mqtt 云架构网关协议的选择
http vs mqtt 云架构网关协议的选择

- - http响应报文

http vs mqtt 云架构网关协议的选择
http vs mqtt 云架构网关协议的选择

- - http请求的一个完整过程

  1. 三次握手,建立TCP连接
  2. Client向Server发送请求数据 (例如Get http://XX.yy.zz)。发送请求头,接着发送一个空白行,get没有请求数据
  3. S端收到以上信息后,开始处理业务
  4. S端处理完毕后,开始应答。S端向C端,发送响应头,接着发送response header,发送完response header后,再发送一个空白行,接着发送数据。
  5. 发送完毕后,S端4次挥手关闭TCP连接

参考

https://biteeniu.github.io/mqtt/mqtt-v3.1.1-os-protocol-structure/
https://cloud.tencent.com/developer/news/110954