2。1 MQTT理论
2。1。1 MQTT简介
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是由IBM公司提出的一个基于代理的消息传输协议。它是一种构建于TCP/IP协议并且基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议。它最大优点在于可以通过极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。尤其适合机器与机器通信和物联网环境。
2。1。2 工作原理
MQTT分为两个部分:MQTT客户端,MQTT服务端。使用MQTT协议连接到网络服务器的客户端可以:发布其他客户端可能会订阅的信息,订阅其它客户端发布的消息,退订或删除应用程序的消息,断开与服务器连接。
MQTT服务器以称为“消息代理”(Broker)可以:接受来自客户的网络连接,接受客户发布的应用信息,处理来自客户端的订阅和退订请求。向订阅的客户转发应用程序消息。
MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)[[[] 李金凤。 一种基于MQTT发布/订阅机制的冷藏运输智能监控系统[J]。 互联网天地,2014,07:30-33。]]。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。如图2-1所示:
图 2-1 MQTT原理图
MQTT传输的消息分为:主题(Topic)和负载(payload)两部分。 Topic,即消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息。payload,即消息的内容,是指订阅者具体要使用的内容。
MQTT会构建底层网络传输:它将建立客户端到服务器的连接,提供两者之间的一个有序的、无损的、基于字节流的双向传输。当应用数据通过MQTT网络发送时,MQTT会把与之相关的服务质量(QoS)和主题名(Topic)相关联。并且发布/订阅这种机制通过代理服务器中的Topic作为中介相互之间进行通信。Subscribe和Publish之间并不通过TCP协议建立连接,发布的消息先进入一个队列,当订阅者对其中一个或多个主题感兴趣的时候,便接受感兴趣的消息。在这个时候,订阅者无需知道消息来自于哪个发布者。这种消息机制大大降低了程序的耦合性。让网络拓扑的形态更加的动态和可拓展性。
选择接受和处理的消息的过程被称作过滤。有两种常用的过滤形式:基于主题和基于内容。在基于主题的系统中,只有相同主题间的发布者和订阅者才能通信。发布者发布消息到消息代理,此时如果订阅者向该消息代理注册订阅,并且订阅消息的主题与发布者相同时,便接收同样的消息。消息代理将订阅者的消息行存储并转发到订阅者。由于发布/订阅的消息模式,支持一对多的订阅方式,即允许多个订阅者对同一个主题的消息进行订阅[[[] Daniel Barata,Gonçalo Louzada,Andreia Carreiro,António Damasceno。 System of Acquisition, Transmission, Storage and Visualization of Pulse Oximeter and ECG Data Using Android and MQTT[J]。 Procedia Technology,2013,9:。]]。
2。1。3 功能及特点
作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。这些特点使它局限于某些场景,但不仅限制于此。该协议网络代价昂贵,带宽低、不可靠。在嵌入设备中运行,处理器和内存资源有限。
它使用发布/订阅消息模式,提供一对多的消息发布,减少应用程序耦合。并且对负载内容屏蔽的消息传输。使用 TCP/IP 提供网络连接。有三种消息发布服务质量:至多一次,至少一次,只有一次[[[] 周维。 基于Web技术的智能家居控制系统的设计与实现[D]。西安电子科技大学,2014。]]。