网络连接协议
为了服务器减压,通常需要需要选择轻量级的协议。
和服务器链接有哪些协议呢?
占用网络资源较多的协议:SAMBA,NFS,FTP,TFTP
占用资源较少的协议:MQTT, HTTP
MQTT和HTTP都是基于TCP协议的应用层协议。
在 MQTT和HTTP中,选择哪个协议呢?
- -HTTP vs MQTT
MQTT协议(以V3.1.1为例)
Message Queuing Telemetry Transport
https://github.com/mcxiaoke/mqtt
MQTT报文格式
4>= K >=1,即fixed header 长度为2~5 bytes
- - fixed header
Byte1:
bit7 ~ bit4为报文类型,bit3 ~ bit0为相应的标志位。
Byte2~Byte5
为剩余长度字段(Remaining Length),它表示的是MQTT控制报文后面所剩余的字节数,所剩余的字节数不包含剩余长度字段本身。
每个字节的最高位为1表示延续位(continuation bit) ,表示后续字节为属于剩余长度字段。
由此推理payload理论上,最大值为2^28=256MB。
- - variable header
不同类型报文,其格式和内容不同。
通常情况下,variable header部分,都会包含2字节的Packet Identifier。
- - payload
MQTT 传输流程
http协议
HyperText Transfer Protocol分为请求报文和响应报文两种。
http传送的都是一堆ASCII码
- - http请求报文
- - http响应报文
- - http请求的一个完整过程
- 三次握手,建立TCP连接
- Client向Server发送请求数据 (例如Get http://XX.yy.zz)。发送请求头,接着发送一个空白行,get没有请求数据
- S端收到以上信息后,开始处理业务
- S端处理完毕后,开始应答。S端向C端,发送响应头,接着发送response header,发送完response header后,再发送一个空白行,接着发送数据。
- 发送完毕后,S端4次挥手关闭TCP连接
参考
https://biteeniu.github.io/mqtt/mqtt-v3.1.1-os-protocol-structure/
https://cloud.tencent.com/developer/news/110954