MQTT简介

来源:互联网 发布:管家婆erp是什么软件 编辑:程序博客网 时间:2024/05/29 18:55

(一)什么是MQTT

Message Queuing Telemetry Transport,消息队列遥测传输,是IBM于1998年设计和开发的一种即时通信协议。MQTT是轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务。在2014年,MQTT成为OASIS标准协议。

最新规范版本为3.1.1。
http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html

(二)为什么要用MQTT

(1)低协议开销
MQTT的每消息标题可以短至 2 个字节。对于 HTTP,为每个新请求消息重新建立 HTTP 连接,会导致重大的开销。 MQTT 所使用的永久连接显著减少了这一开销。

(2)对不稳定网络的容忍
MQTT 能够从断开等故障中恢复,而且没有进一步的代码需求。但是,HTTP 无法原生地实现此目的,需要客户端重试编码,这可能增加幂等性问题。

(3)低功耗
MQTT 是专门针对低功耗目标而设计的,HTTP 的设计没有考虑此因素。

(4)数百万个连接的客户端
在 HTTP 堆栈上,维护数百万个并发连接,需要做许多的工作来提供支持。IBM 提供了 IBM MessageSight,这是一个单机架装载服务器,经过测试能处理多达 100 万个通过 MQTT 并发连接的设备。

(5)推送通知
MQTT采用订阅/发布模式,为推送而生。HTTP 只允许使用一种称为COMET 的方法,使用持久的 HTTP 请求来执行推送。从客户端和服务器的角度讲,此方法都很昂贵。

当然,MQTT也不是完美的。

(1)不支持离线消息,需要弥补设备离线以后,MQTT服务器对设备的控制信息丢失的问题。

(2)不支持点对点通信。当设备B和设备C可发送同一主题的情况下,设备A无法知道是设备B还是设备C发送的消息,也有可能消息被设备D窃听。

(3)框架繁多。不同的框架提供了不同的SDK,不同的SDK所支持的功能范围也不尽相同。例如不少框架尚不支持android,SSL。

(三)MQTT如何工作

MQTT协议所传输的信息,都需要一个Topic(主题)。
MQTT服务器被称为broker,会根据Topic来分发所接收的信息。
MQTT客户端被称为client,可以发送任意Topic,也可以接收所注册的Topic。
发送Topic消息的一方,被称为publisher。
接收Topic消息的一方,被称为Subscriber.
MQTT客户端,既可以是Subscriber,也可以同时为publisher。

对于发送的消息,MQTT可以指定发送质量。

“至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓。
“至少一次”,确保消息到达,但消息重复可能会发生。
“只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。

(四)MQTT broker的选择

你不需要给自己创建一个MQTT的消息中转站!MQTT有很多免费的broker可供选择,这是很令人高兴的。
当然,你也可以使用开源框架,搭建自己的MQTT broker。只是如果想达到百万级的连接量的话,就不要去想。因为,所谓的“开源”也是用来赚钱的。通常1~2万级别还是有戏的。上量的话,收费!之前项目需要,使用了一款broker,据说是一华为毕业的同仁开发。按连接量收费,每个连接5毛。看来,技术就是生产力啊。靠手艺吃饭,没的说,就是用起来有点贵。果断弃之~

在之前的项目中,尝试了一下几种框架。
(1)mosquitto,使用C和C++开发,老牌MQTT broker。64位版本问题较多,需要结合Cmake来进行重新编译。
(2)Joram,使用Java开发,能对Server端信息的分流进行监听。但问题在于没有对Android的支持。
(3)emqttd,使用Erlang语言开发,二次开发难度大,容易受制于人。

如果同学对自己搭建MQTT Server感兴趣,但又不知该如何选择broker,可以参照如下几篇文章。细节还是很值得研究的。由于项目紧急的缘故,并未自己搭建broker。

http://blog.p2hp.com/archives/1568
https://github.com/mqtt/mqtt.github.io/wiki/servers

(五)paho

paho是eclipse所开发的MQTT开源项目,其重点在于Client端支持android,并对各broker进行兼容。http://wiki.eclipse.org/Paho
之后将用单独的篇幅总结基于paho的MQTT通信。

原创粉丝点击