简说MQTT--第一部分:MQTT是啥?

MQTT是什么?这个问题的最贴切的答案是我在网站mqtt.org看到的:

“MQTT是机器对机器(M2M)/物联网的链接协议。”

它解释得十分清楚,MQTT是M2M和物联网(IoT)连接协议。要理解MQTT,我们需要首先去了解M2M或物联网。

M2M和物联网

许多人已经在用物联网了,他们中有些人只是没有意识到。最近我去拜访我的一位朋友。他对他的新智能烤箱很兴奋,迫不及待地想告诉我他的烤箱是多么聪明:食谱下载到智能手机,然后通过WiFi发送到烤箱;可以通过智能手机的应用程序远程调控烘烤;当食物烤好了,烤箱就发出通知给智能手机。嗯,他已经进入物联网时代了。

物联网的基本概念并不新,它是设备之间的联网,让设备自己收集和交换数据。有时这种数据交换甚至在没有人工干预(机器对机器的连接)的情况下发生。各种设备通过网络彼此集成。现在,这种集成的规模可以是巨大的,它能够提高效率、精度和经济效益,减少人为干预。

在物联网的世界里,几乎所有的东西(包括人)都可以连接起来。事物互联有可能带来新的好处,我们要做的是利用我们的好奇心和想象力来释放这种潜力。高德纳说,到2020,将有超过260亿个连接设备。计算机,手机,平板电脑,台灯,咖啡机,汽车,光传感器,运动探测器,生物芯片,飞机和任何你能想象的东西。有人建议把“物”当做“硬件、软件、数据和服务不可分割的混合物”。

为什么是MQTT

物联网的一个关键要素是,“事物”具有连接的能力。他们需要一种大家都能理解的通用语言,一种连接协议。多年来,世界上已经有很多连接协议,像HTTP这样的协议被数以百万计的应用程序所使用。为什么不是只有一个广泛使用的协议?为什么MQTT是物联网的协议?

“什么事物都可以连接,也将被连接”。想想这样的场景:早上5点半,你的智能手机告诉客厅的暖气调节器调节室内温度,以适应日常活动。5点50,你的智能手机告诉咖啡机开始煮咖啡。当你在6点被你的智能手机叫醒,万事都准备妥当,甚至你喜欢的美剧已经被下载到你的平板电脑里了。当你享受宁静的早晨时,你可能会注意到一件事:所有连接的设备都是如此不同,而它们却一起工作得很好。

我们刚刚讨论的这个物联网场景,我们叫它做智能家居。我们来构建一个智慧城市或者甚至构建一个智慧世界如何?在这个世界里,一个超级计算机可以和一个芯片上的系统交换数据。例如,医疗中心监控病人植入的芯片,并向病人的医生发出警报。当任何设备被允许接入并且设备在地理上广泛分布时,应该使用什么样的通信协议呢?

它必须是一个轻量级的协议,占用的代码量很小,对于这个协议来说,非常有限的网络带宽就足够了。MQTT就是这种协议。

“MQTT是一个客户端服务器的发布/订阅消息传输协议。它轻量、开放、简单,且设计为易于实现。这些特性使得它非常适合在许多情况下使用,包括受限的环境,例如用于机器对机器的通信(M2M)和物联网环境,在其中只需要占用少量的代码和/或网络带宽。”
 – – 引用自MQTT规范

关于MQTT的历史

MQTT是MQ Telemetry Transport的缩写。它首先是Andy Stanford-Clark 和 Arlen Nipper在1999年发明的。他们当时在做一个管道的监控和数据采集系统(Telemetry这个词就来自这里),需要实时在卫星链路和拨号线路上传输数据,以连接远程管道。基于这些有限的资源,他们开始考虑做一个新的发布和订阅协议,就是MQTT协议。

MQTT按下面5个目标来设计的:
它必须能简单地被实现;
它必须有数据传输的服务质量;
它必须轻量和带宽高效;
它必须可传输任意数据;
以及它必须可保持会话。

今天,这五个目标依然被支持,它们本质上和物联网的需求是相等的。

IBM在2010年正式免费发布MQTT3.1,OASIS在2014年标准化了这个协议。写本文的时候,MQTT的版本是3.1.1。MQTT下一个版本是5.0,一个MQTT5.0的工作草稿正在被公示。

MQTT v.s. XMPP

将MQTT和其他协议进行比较可以使得我们更易于理解为什么MQTT适合物联网,在此我们将它和XMPP进行比较,XMPP是上世纪90年代后期诞生的消息协议。

  1. XMPP发明于1999年。它是eXtensible Messaging and Presence Protocol的缩写。
  2. MQTT使用固定大小,即一个字节的头部,以及两个字节的KeepAlive包。它的包小,而且易于编解码。而XMPP用XML封装,它的包大并且交互复杂。
  3. MQTT使用主题来路由消息,它比基于JID的点对点路由的XMPP更灵活。
  4. MQTT不定义有效载荷数据的格式,因此它很容易携带不同的更高层协议的数据。而XMPP用XML来格式化有效载荷数据,它必须用Base64格式封装二进制数据。
  5. MQTT支持消息确认和QoS机制,这些XMPP都没有,因此MQTT更加可靠。

待续……

*原文链接https://medium.com/@emqtt/mqtt-in-a-nutshell-cc24370920c2