初始MQTT

初识 MQTT

 

物联网 (IoT) 设备必须链接互联网。经过链接到互联网,设备就能相互协做,以及与后端服务协同工做。互联网的基础网络协议是 TCP/IP。MQTT(消息队列遥测传输) 是基于 TCP/IP 协议栈而构建的,已成为 IoT 通讯的标准。html

MQTT 最初由 IBM 于上世纪 90 年代晚期发明和开发。它最初的用途是将石油管道上的传感器与卫星相连接。顾名思义,它是一种支持在各方之间异步通讯的消息协议。异步消息协议在空间和时间上将消息发送者与接收者分离,所以能够在不可靠的网络环境中进行扩展。虽然叫作消息队列遥测传输,但它与消息队列毫无关系,而是使用了一个发布和订阅的模型。在 2014 年底,它正式成为了一种 OASIS 开放标准,并且在一些流行的编程语言中受到支持(经过使用多种开源实现)。数据库

为什么选择 MQTT

MQTT 是一种轻量级的、灵活的网络协议,致力于为 IoT 开发人员实现适当的平衡:编程

  • 这个轻量级协议可在严重受限的设备硬件和高延迟/带宽有限的网络上实现。
  • 它的灵活性使得为 IoT 设备和服务的多样化应用场景提供支持成为可能。

为了了解为何 MQTT 如此适合 IoT 开发人员,咱们首先来分析一下为何其余流行网络协议未在 IoT 中获得成功应用。后端

为何不选择其余众多网络协议

大多数开发人员已经熟悉 HTTP Web 服务。那么为何不让 IoT 设备链接到 Web 服务?设备可采用 HTTP 请求的形式发送其数据,并采用 HTTP 响应的形式从系统接收更新。这种请求和响应模式存在一些严重的局限性:浏览器

  • HTTP 是一种同步协议。客户端须要等待服务器响应。Web 浏览器具备这样的要求,但它的代价是牺牲了可伸缩性。在 IoT 领域,大量设备以及极可能不可靠或高延迟的网络使得同步通讯成为问题。异步消息协议更适合 IoT 应用程序。传感器发送读数,让网络肯定将其传送到目标设备和服务的最佳路线和时间。
  • HTTP 是单向的。客户端必须发起链接。在 IoT 应用程序中,设备或传感器一般是客户端,这意味着它们没法被动地接收来自网络的命令。
  • HTTP 是一种 1-1 协议。客户端发出请求,服务器进行响应。将消息传送到网络上的全部设备上,不但很困难,并且成本很高,而这是 IoT 应用程序中的一种常见使用状况。
  • HTTP 是一种有许多标头和规则的重量级协议。它不适合受限的网络。

出于上述缘由,大部分高性能、可扩展的系统都使用异步消息总线来进行内部数据交换,而不使用 Web 服务。事实上,企业中间件系统中使用的最流行的消息协议被称为 AMQP(高级消息排队协议)。可是,在高性能环境中,计算能力和网络延迟一般不是问题。AMQP 致力于在企业应用程序中实现可靠性和互操做性。它拥有庞大的特性集,但不适合资源受限的 IoT 应用程序。服务器

除了 AMQP 以外,还有其余流行的消息协议。例如,XMPP(Extensible Messaging and Presence Protocol,可扩展消息和状态协议)是一种对等即时消息 (IM) 协议。它高度依赖于支持 IM 用例的特性,好比存在状态和介质链接。与 MQTT 相比,它在设备和网络上须要的资源都要多得多。网络

那么,MQTT 为何如此轻量且灵活?MQTT 协议的一个关键特性是发布和订阅模型。与全部消息协议同样,它将数据的发布者与使用者分离。异步

发布和订阅模型

MQTT 协议在网络中定义了两种实体类型:一个消息代理和一些客户端。代理是一个服务器,它从客户端接收全部消息,而后将这些消息路由到相关的目标客户端。客户端是可以与代理交互来发送和接收消息的任何事物。客户端能够是现场的 IoT 传感器,或者是数据中心内处理 IoT 数据的应用程序。编程语言

  1. 客户端链接到代理。它能够订阅代理中的任何消息 “主题”。此链接能够是简单的 TCP/IP 链接,也能够是用于发送敏感消息的加密 TLS 链接。
  2. 客户端经过将消息和主题发送给代理,发布某个主题范围内的消息。
  3. 代理而后将消息转发给全部订阅该主题的客户端。

由于 MQTT 消息是按主题进行组织的,因此应用程序开发人员能灵活地指定某些客户端只能与某些消息交互。例如,传感器将在 “sensor_data” 主题范围内发布读数,并订阅 “config_change” 主题。将传感器数据保存到后端数据库中的数据处理应用程序会订阅 “sensor_data” 主题。管理控制台应用程序能接收系统管理员的命令来调整传感器的配置,好比灵敏度和采样频率,并将这些更改发布到 “config_change” 主题。(参阅图 1。)性能

图 1. IoT 传感器的 MQTT 发布和订阅模型

使用 MQTT 代理、数据存储和管理控制台发布和订阅传感器数据消息的流程图

同时,MQTT 是轻量级的。它有一个用来指定消息类型的简单标头,有一个基于文本的主题,还有一个任意的二进制有效负载。应用程序可对有效负载采用任何数据格式,好比 JSON、XML、加密二进制或 Base64,只要目标客户端可以解析该有效负载。

相关文章
相关标签/搜索