1. 概述
协议设计部分主要用来描述mqtt交互的数据包格式。
2. 协议内容
2.1 协议框架
复杂通信系统协议通常采用分层设计,方便不同业务做相对应的过滤和分发处理。
MQTT协议的应用设计包含主题和Payload,可以理解为连接到同一个MQTT Broker的设备同属于一套通信系统,主题和Payload是MQTT的第一分层逻辑。
业务上的分层逻辑可以在主题和Payload进一步设计。
2.2 主题
我们设置两类主题,主要用来明确数据包的目标接收方。
设备端接收主题(文中简称TopicToServer): /v1/[key]/device
服务端接收主题(文中简称TopicToServer): /v1/[key]/server
【注】主题中[key]做设备的唯一id, 可以是mac地址,UUID等。
2.3 Payload协议设计
协议采用json格式。
2.3.1 基本格式
Payload: {"id":x,"type":"","UUID":"","parm":{}}
说明:
id: 由数据包主动发起方各自维护,应答数据包的id需要跟请求包一致。
type: 数据包类型区分的关键字。
parm: 参数详情根据type的不同而变化。
UUID: 设备唯一ID
2.3.2 文件信息传输
主题: TopicToServer
Payload: {"id":x,"type":"fileInfo","UUID":"","parm":{"fileName":"x","fileType":"x","contentFormat":"","packageNums":x}}
说明:
type: fileInfo 文件信息传输包。
parm:
fileName: 传输的文件名称
fileType: 传输文件类型
raw - 原始文件,没有压缩
zip - zip压缩包
rar - rar压缩包
tar - tar压缩包
tgz - tar.gz压缩包
tbz2- tar.bz2压缩包
contentFormat: 内容格式
ascii - ascii格式
hex - 十六禁止数据格式
packageNums:分包数量
2.3.3 文件信息传输应答
主题: TopicToDevice
Payload: {"id":x,"type":"fileInfoAck","UUID":"","parm":{"fileName":"文件名称","fileType":"raw","contentFormat":"","packageNums":x}}
说明:
type: fileInfoAck 文件信息输应答
parm: 参数详见fileInfo
2.3.4 文件内容传输
主题: TopicToServer
Payload: {"id":x,"type":"fileContent","UUID":"","parm":{"fileName":"文件名称","content":"","packageID":x}}
说明:
type: fileContent 文件内容传输包
parm:
fileName:文件名称
content: 传输的文件内容,以base64编码
packageID: 分包的包序号,范围从0到packageNums-1
2.3.5 文件内容传输应答
主题: TopicToServer
Payload: {"id":x,"type":"fileContentAck","UUID":"","parm":{"fileName":"文件名称","packageID":x}}
说明:
type: fileContentAck 文件内容传输应答
parm:
fileName:文件名称
packageID: 分包的包序号,范围从0到packageNums-1
2.3.6 文件传输完成
主题: TopicToServer
Payload: {"id":x,"type":"fileEnd","UUID":"","parm":{"fileName":"文件名称","fileType":"x","contentFormat":"","packageNums":x,"base64MD5":""}}
说明:
type: fileEnd 文件传输完成。
parm:
fileName: 传输的文件名称
fileType: 传输文件类型
raw - 原始文件,没有压缩
zip - zip压缩包
rar - rar压缩包
tar - tar压缩包
tgz - tar.gz压缩包
tbz2- tar.bz2压缩包
contentFormat: 内容格式
ascii - ascii格式
hex - 十六禁止数据格式
packageNums:分包数量
base64MD5: 传输文件内容MD5文章来源:https://www.toymoban.com/news/detail-503959.html
2.3.7 文件传输完成应答
主题: TopicToDevice
Payload: {"id":x,"type":"fileEndAck","UUID":"","parm":{"fileName":"文件名称","base64MD5":""}}
说明:
type: fileEndAck 文件传输完成应答。
parm:
fileName: 传输的文件名称
base64MD5: 传输文件内容MD5文章来源地址https://www.toymoban.com/news/detail-503959.html
2.4 上传和下载
文件传输包含上传和下载,以上协议完成了协议上传的正给流程。文件的下载步骤跟上传步骤一样,过程总只需互换请求和应答的主题即可满足文件下载功能。
到了这里,关于MQTT文件传输-2. 协议篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!