天天看点

MQTT 折腾笔记----协议简读

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

即时传输的轻量级协议

专门设计用于低带宽或者高昂的网络费用

具备三种服务品质层级

MQTT 协议相对某些协议来说,实在是简短的令人发指,整个协议只用42页就说完了.

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

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

<code>|--------------------| | &lt;stream&gt; | |--------------------| | &lt;presence&gt; | | &lt;show/&gt; | | &lt;/presence&gt; | |--------------------| | &lt;message to='foo'&gt; | | &lt;body/&gt; | | &lt;/message&gt; | |--------------------| | &lt;iq to='bar'&gt; | | &lt;query/&gt; | | &lt;/iq&gt; | |--------------------| | ... | |--------------------| | &lt;/stream&gt; | |--------------------|</code>

<a href="https://tools.ietf.org/html/rfc2616">HTTP</a>

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

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

bit

7

6

5

4

3

2

1

byte 1

Message Type

DUP flag

QoS level

RETAIN

byte 2

Remaining Length

第一个byte 用于说明消息体的信息.

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

<a href="http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html#msg-format">更多详情请看协议 msg-format 部分</a>

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

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

准备

服务端:

客户端:

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

服务器是一个广播模型

对于订阅/发布没有限制使用topic(主要是为了后面的知识做准备)

订阅者获取到一次发布者消息就断开连接

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

例子流程图: clientA -&gt;(connect) server

启动发布者:mqttClientPub

例子流程图: clientB -&gt;(publish) server -&gt;(pub) clientA

以上就是整个例子的流程

版权声明:原创作品,如需转载,请注明出处。否则将追究法律责任

本文转自 liam2199 博客,原文链接: 

http://blog.51cto.com/youxilua/1186126

  如需转载请自行联系原作者

继续阅读