物联网并不仅仅是一种网络,而是一个新的生态环境,它描述的本质是越来越多的使用物品通过网络连接在一起并可使用单个或者多个的终端设备对它们进行各种控制和使用—当然,工业上的物联网通常连接到的石鼓传感器或者其他数据采集仪器以及行为单位。思科曾经预测过,物联网市场的规模可能在14万亿美金左右,前景极为光明。
众所周知,物联网是在传统互联网基础上延伸和扩展而出的概念,用户端从传统的计算机延伸和扩展到了任何物品与物品之间,而物品则通过各种传感器进行信息采集,然后通过计算设备进行网络信息交换与通信。但是当前移动互联网正处于起步阶段,很多时候无法提供可靠的网络保障,因此,IBM主导并提出了MQTT协议,致力于解决这一方面的问题。
什么是MQTT协议?
MQTT是一个由IBM主导开发的物联网传输协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务。它的核心设计思想是开源、可靠、轻巧、简单,具有以下主要的几项特性:
1.  非常小的通信开销(最小的消息大小为 2 字节);
2.  支持各种流行编程语言(包括C,Java,Ruby,Python 等等)且易于使用的客户端;
3.  支持发布 / 预定模型,简化应用程序的开发;
4.  提供三种不同消息传递等级,让消息能按需到达目的地,适应在不稳定工作的网络传输需求
对于传统的HTTP和MQ协议,MQTT的优势在哪里呢?这有一张表格能清楚的展示这一点
低协议开销
MQTT 的独特之处在于,它的每消息标题可以短至 2 个字节。MQ 和 HTTP 都拥有高得多的每消息开销。对于 HTTP,为每个新请求消息重新建立 HTTP 连接会导致重大的开销。MQ 和 MQTT 所使用的永久连接显著减少了这一开销。
   对不稳定网络的容忍
MQTT 和 MQ 能够从断开等故障中恢复,而且没有进一步的代码需求。但是,HTTP 无法原生地实现此目的,需要客户端重试编码,这可能增加幂等性问题。
   低功耗
MQTT 是专门针对低功耗目标而设计的。HTTP 的设计没有考虑此因素,因此增加了功耗。
   数百万个连接的客户端
在 HTTP 堆栈上,维护数百万个并发连接,需要做许多的工作来提供支持。尽管可以实现此支持,但大多数商业产品都为处理这一数量级的永久连接而进行了优化。IBM 提供了 IBM MessageSight,这是一个单机架装载服务器,经过测试能处理多达 100 万个通过 MQTT 并发连接的设备。相反,MQ 不是为大量并发客户端而设计的。
   推送通知
您需要能够及时地将通知传递给客户。为此,必须采用某种定期轮询或推送方法;从电池、系统负载和带宽角度讲,推送是最佳解决方案。
我们的企业可能需要在没有第三方中介的情况下发送敏感的信息。这降低了特定于操作系统的解决方案(比如 Apple iOS、Google Play 通知)作为主要传输机制的价值。
HTTP 只允许使用一种称为COMET 的方法,使用持久的 HTTP 请求来执行推送。从客户端和服务器的角度讲,此方法都很昂贵。MQ 和 MQTT 都支持推送,这是它们的一个基本特性。
   客户端平台差异
HTTP 和 MQTT 客户端都已在大量平台上实现。MQTT 的简单性有助于以极少的精力在额外的客户端上实现 MQTT。
   防火墙容错
一些企业防火墙将出站连接限制到一些已定义的端口。这些端口通常被限制为 HTTP(80 端口)、HTTPS(443 端口)等。HTTP 显然可以在这些情况下运行。MQTT 可封装在一个 WebSockets 连接中,显示为一个 HTTP 升级请求,从而允许在这些情况下运行。MQ 不允许采用这种模式。
事实上,MQTT的应用非常之广泛,几乎现在随便找一家大型的硬件、互联网企业,都可以找到MQTT的身影,例如Facebook、BP、alibaba、baidu等等
 
MQTT协议的缺陷以及MQTT+概念的提出
由于MQTT本身的各项技术优势,越来越多的企业倾向于选用MQTT作为物联网产品通讯的标准协议,也因此,工程师们渐渐发现MQTT协议要想大规模商用,也有一些有待完善的功能。比如:
 
——没有齐备的SDK,不同的异构终端,需要有对应的与MQTT服务器通信的软件SDK包,比如MCU、Linux、Android、IOS、WEB等之间要实现互联互通必然需要不同的SDK包
——不支持File和AV,有些应用场景,需要传输的信息可能不仅仅限于指令,比如声音信号和视频信号,这些需要通过File和AV来实现通信。
——不支持与第三方HTTP的集成,虽然MQTT协议优于普通的HTTP协议,但是基于传统的HTTP协议的WEB服务器仍然占主流市场,那么这些服务器要实现与MQTT协议的互联互通,以降低升级成本也尤为关键。
——不支持负载均衡,为防止高并发和恶意攻击,负载均衡服务器也必不可少。
——不支持用户管理接口,用户在进行设备的行为数据分析的时候,显得尤为重要,这又是工业4.0、大数据时代的必然需求。
——不支持离线消息,弥补设备离线以后,MQTT服务器对设备的控制信息丢失的问题。
——不支持点对点通信,采用标准的MQTT协议,理论上可以通过相互订阅的方式实现点对点通信,但是逻辑相对复杂,并且对设备的安全性方面存在担忧。当设备B和设备C在同一主题的情况下,设备A无法知道是设备B还是设备C发送的消息,也有可能消息被设备D窃听。
——不支持群通信和群管理,实现了对群组成员的管理,群组成员之间能互通消息,这在一个设备被多人控制,或者多个设备被一人控制的这种场景下,尤为有用。
这些问题阻碍了MQTT技术在国内市场的进一步发展,毕竟对于单个的公司或者工程师而言,想要解决它们需要耗费大量的资源和时间,并且稳定性的验证也需要一个较长的时间周期。但近期,国内的一支物联网开发团队经过两年艰苦的研发和商业化验证,在MQTT协议的基础上,正式提出了一套新的解决方案,称之为ET-iLink MQTT+物联网解决方案,团队同步公布了其中的一些细节和技术指标,引起了业界的关注。
 
MQTT+连接云是什么?
ET-iLink MQTT+物联网解决方案是一套综合性的方案,下图是使用MQTT+作为设备接入协议的整体解决方案框图。
设备使用MQTT+客户端可以在特定的主题上发布消息,也可以通过订阅特定的主题以接收其他设备或者用户发布的消息,从而实现M2M,M2P,P2M的通信。
云网关LB Sever负责设备的接入,协议适配,消息转发等功能,如果要支持海量设备的接入,LB Sever集群是必须的。
设备管理负责设备接入认证,设备与用户绑定,操作授权等相关的功能。
账号管理负责用户账号安全认证,授权认证等相关的功能,同时也支持第三方账号安全认证。
云服务负责设备业务逻辑。不同的设备厂商都有一套自己的业务逻辑和服务,这种服务可以和容易的运行在云端提供的容器中,使用基于容器的微服务使得应用程序能够更快地进行创建,并且更易于维护,同时又能够得到更高的质量。而数据的存储和分析使用云平台提供的通用的存储服务和大数据分析引擎。
用户只要注册账号,绑定设备,就可以通过手机APP,微信或者web等终端轻松查看设备信息,与设备进行交互操作。
此解决方案具有的优势有:
·移动设备
能在 8bit 位处理器上很好的运行 C /JavaScript/Java 的 client 库分别只有 30/75/100KB
在移动设备上耗电率低,大约只需要 HTTP 的一半
·很好的适应各种复杂网络,特别是受限网络
预期并适应频繁的网络中断,能应对低速、低质量的网络
压缩优化过后的协议,可以有效降低网络流量,从而节约网络成本
完成同样的数据通信,MQTT只需要 HTTP 约 1/4 得数据流量
·发布 - 订阅的消息通信协议,允许一条消息只发布一次,便可被多个消费端(应用程序 / 设备)所接收
·能够实现设备与设备之间的点对点的双向通信。
·对HTTP接口的兼容,能实现系统间松耦合,简化开发,方便扩展,整合。
·提供灵活便捷的系统整合能力
使用微服务+docker的方式,快速部署高效运行云端服务
提供可靠的设备管理和账号管理体系,您只需要关注核心业务
提供通用的数据存储和数据分析服务
提供与第三方云平台的对接功能
提供协议适配功能,客户端可以使用多种通信协议与设备进行通信。
·提供丰富的安全性
使用 SSL 提供的认证和加密来保证传输安全性
采用账号安全认证+设备安全认证结合的方式保证内容安全
·强大的性能提高系统的高可靠性
高连接数下系统低计算资源使用
高连接数下系统高信息处理速度
·提供多种消息服务质量,满足不同场景需求
0 :消息最多被传递一次,比如一般类广告,通知
1 :消息会被传递但可能会重复传递,比如账户余额通知
2 :消息保证传递且仅有一次传递,比如交易支付批复通知
 
硬件+软件+私有云平台开发套件/免费的公有云平台支持
小e MQTT系列全功能开发板是为了帮助工程师们快速实现物联网项目的开发而提供一款配套开发板。考虑到实际的项目应用环境,它有两个不同的版本:
小e1Wi-Fi全功能开发板采用ESP8266 WiFi SOC 芯片,采用Free RTOS实时操作系统,主频可达160MHZ。支持标准的 IEEE802.11 b/g/n 协议,完整的 TCP/IP 协议栈,具有丰富的硬件接口,并配备OLED屏,温湿度传感器,大气压传感器,RGB,IR等,利用微信进行远程控制与语音互动,代码开源。
小e2 2G透明串口开发板,是利用SIM卡和运营商的GPRS网络提供无线数据传输功能的开发板,通过此开发板的2G模块,可以提供各种设备(PC、手机、服务器)到模块间的透明的数据交互。
 
整套的解决方案包含配套的硬件开发板、APP/微信DEMO/免费的公有云支持/企业级私有云服务套机/7大平台SDK包/上百个技术文档等等一系列内容,支持无缝对接现有产品的物联网升级,现正在聚丰众筹平台上进行众筹,有兴趣的工程师不妨去了解一下:http://z.elecfans.com/48.html?ytemail85

物联网项目开发必读 深度分析MQTT协议优缺点的更多相关文章

  1. 物联网防火墙himqtt源码之MQTT协议分析

    物联网防火墙himqtt源码之MQTT协议分析 himqtt是首款完整源码的高性能MQTT物联网防火墙 - MQTT Application FireWall,C语言编写,采用epoll模式支持数十万 ...

  2. 使用wireshark分析MQTT协议

    网络上搜索到两种用wireshark工具分析MQTT协议的方法,都是使用wireshark插件,一种是Wireshark Generic Dissector:另一种是使用lua脚本插件(推荐使用这种方 ...

  3. 深度剖析MQTT协议的整个通信流程

    http://www.elecfans.com/d/587483.html MQTT,目前物联网的最主要的协议,基本所有收费的云平台都是基于MQTT协议,比如机智云,和所有的开放云平台比如中国移动的o ...

  4. 转战物联网·基础篇05-通俗理解MQTT协议的实现原理和异步方式

      网络上搜索MQTT协议,会出现太多的解释,这里就不做官方标准释义的复制了.这一节我们从实战理解角度,通俗的将MQTT协议的作用及实现原理说一下,旨在可以快速理解MQTT协议.所以可能会出现很多看似 ...

  5. 【物联网云端对接-3】通过MQTT协议与微软Azure IoT Hub进行云端通信

    在上一篇文章<通过MQTT协议与阿里云物联网套件进行云端通信>中,我们介绍了通过MQTT对接阿里云的物联网套件.其实同样的代码,稍加调整也可以对接到微软Azure IoT hub上,不过需 ...

  6. 【物联网云端对接-4】通过MQTT协议与百度云进行云端通信

    百度云的天工物联网服务目前包括:物接入.物解析.物管理.时序数据库和规则引擎等5大部分,本篇文章仅介绍物接入. 天工物联网的物接入,从开发者的角度来说相对有些复杂,需要多步操作才能实现一个云设备的创建 ...

  7. 转战物联网·基础篇07-深入理解MQTT协议之控制报文(数据包)格式

      在MQTT协议中,一个控制报文(数据包)的结构按照前后顺序分如下三部分: 结构名 中文名 解释说明 Fixed header 固定报头 报文的最开始部分,所有报文都包含这个部分 Variable ...

  8. 转战物联网·基础篇06-深入理解MQTT协议之基本术语

      通过上一节我们对MQTT协议已经有了初步的印象,这一节我们开始深入的理解一下MQTT协议,介绍常用的MQTT 3.1.1版本,5.0版本后面指介绍新增部分即可.这一节我们先介绍MQTT里常用的术语 ...

  9. 【物联网云端对接-2】通过MQTT协议与阿里云物联网套件进行云端通信

     在<程序员>杂志2017.4刊上,曾写过一篇<微软百度阿里三大物联网平台探析>,上面曾介绍了阿里云物联网套件的一些内容,在写该篇文章的时候,凌霄物联网网关还无法对接到此平台( ...

随机推荐

  1. linux 更新yum源 改成163源

    安装完CentOS6.3后,为避免从国外站点安装更新速度过慢,需要更改yum更新源,所以从网上找了下更改linux yum源的方法,和大家进行下分享.原理很简单,就是把yum配置文件中的更新源改一下, ...

  2. 转载 -- 基于原生JS与OC方法互相调用并传值(附HTML代码)

    最近项目里面有有个商品活动界面,要与web端传值,将用户在网页点击的商品id 传给客户端,也就是js交互,其实再说明白一点就是方法的互相调用而已. 本文叙述下如何进行原生的JavaScript交互 本 ...

  3. linux 改动rootpassword以及忘记rootpassword

    改动rootpassword: $ passwd root 或者sudo passwd root $password:  (要求输入旧的密码) $new  password:(输入两遍新密码) 忘记r ...

  4. 关于spring的bean

    1 spring bean的单例和多例 singleton 单例指的是,在需要该bean的地方,spring framework返回的是同一个值. prototype 多例指的是,在需要该bean的地 ...

  5. ast.literal_eval(jsonStr) json格式字符串转dict 2种方式

    json.loads(jsonStr, encoding='utf-8')import ast ast.literal_eval(jsonStr)

  6. phpPHP创建创建jpg格式图片以及压缩图片(转)

    其实是因为一些业务上的需求,所以需要对用户上传后的图片进行压缩,因为上传的图片比较大,显示的时候加载起来如果网速不给力的话就很吃力了,而且大图片也浪费空间,于是找了一下相关的资源,主要方法在开源中国上 ...

  7. SD相关的表

    [转] 一.客户主数据基本数据放在KNA1里:公司代码放在KNB1里:销售视图放在KNVV里:合作伙伴放在KNVP里:二.信用主数据KNKK里有信贷限额.应收总额.特别往来:S066里是未清订单值:S ...

  8. (转)ARCGIS中坐标转换及地理坐标、投影坐标的定义

    原文地址:http://blog.sina.com.cn/s/blog_663d9a1f01017cyz.html 1.动态投影(ArcMap) 所谓动态投影指,ArcMap中的Data 的空间参考或 ...

  9. Java for LeetCode 094 Binary Tree Inorder Traversal

    解题思路: 中序遍历,左子树-根节点-右子树 JAVA实现如下: public List<Integer> inorderTraversal(TreeNode root) { List&l ...

  10. Vue:实践学习笔记(5)——Vue-Cli脚手架的使用

    Vue:实践学习笔记(5)——Vue-Cli脚手架的使用 快速开始 项目配置 可视化配置 vue ui 命令配置 vue init webpack vue-demo(项目名) 运行测试 进入vue-d ...