MQTT学习笔记

MQTT 解决什么事情?

从WIKI 来看MQTT 协议主要解决的是机器与机器之间数据通信,各位想到什么没?有接触过物联网的话,可能有所了解了,当我们所有机器都能在一个网络上面分配的一个地址的话,由于,设备间的性能差异,低到可能就是一个插座,而你需要这个插座能进行数据通信,例如,控制这个插座的开-闭这类的,就需要一个极其轻量级的协议而MQTT 协议就是为此目的诞生的.

比较有趣的是,MQTT这个协议在1999 年就有了最新的版本是v3.1(2010/12/06),其适用于如下但不限于这几点:

即时传输的轻量级协议
专门设计用于低带宽或者高昂的网络费用
具备三种服务品质层级

MQTT 协议简读

MQTT 协议相对某些协议来说,实在是简短的令人发指,整个协议只用42页就说完了.
MQTT是一个ISO标准发布 - 订阅为基础的“轻量级”的消息有关TCP / IP协议之上使用协议。它是专为与其中的“小码足迹”是必需的,或网络带宽是有限的偏远地区连接。发布 - 订阅消息传递模式需要消息代理。代理负责分发消息基于消息的话题有兴趣的客户。安迪·斯坦福 - 克拉克和Cirrus链解决方案的阿伦尼珀在1999年撰写的协议的第一个版本。

MQTT v3 到 v3.1 有几点比较重要的变化个人感觉最重要的是从ascii 码转向 utf8的支持,不过我估计没人用过v3 所有我这里不多说了,有兴趣的,请翻阅一下协议文档.....

传输开销的比较
MQTT 最引以为豪的就是最小的2 byte 头部传输开销.我们看下其他流行的协议的message format的设计

XMPP 消息体用的是xml

|--------------------| | | |--------------------| | | | | | | |--------------------| | | | | | | |--------------------| | | | | | | |--------------------| | ... | |--------------------| | | |--------------------|

HTTP

HTTP-message = Request | Response ; HTTP/1.1 messages

还有很多协议,就不一样细说了,就举两个我比较了解的.就目前通用的协议来看很少有比MQTT 还要低的传输开销了.如果,你有了解的希望介绍一下.

消息体的设计简说
bit 7 6 5 4 3 2 1 0
byte 1 Message Type DUP flag QoS level RETAIN
byte 2 Remaining Length
第一个byte 用于说明消息体的信息.

第二个byte 用于传输我们需要传输的数据.

更多详情请看协议 msg-format 部分

接下来,结合一个最简例子来对这个消息体进行说明

MQTT 最简例子
为了方便进行MQTT的了解与使用,目前MQTT的资料极其匮乏,也找不到什么给力的例子所以,随着我研究的深度,来慢慢提高这些例子的难度.

准备

服务端:

nodejs: MQTT.js
客户端:

nodejs: MQTT.js
java: Paho
例子地址:https://github.com/youxiachai... java 版本暂未提供,晚些时候写个Android的客户端....

例子设计
为了简单,方便理解,这个例子:

服务器是一个广播模型
对于订阅/发布没有限制使用topic(主要是为了后面的知识做准备)
订阅者获取到一次发布者消息就断开连接

首先服务端启动,接着启动 mqttClientSub

例子流程图: clientA ->(connect) server

启动发布者:mqttClientPub
例子流程图: clientB ->(publish) server ->(pub) clientA 以上就是整个例子的流程

关键字:mqtt, 协议, byte, 例子


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部