什么是MQTT协议

  MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端应用系统之间通信的问题。

为什么需要MQTT(或类似)协议

  随着智能硬件和移动互联网技术的快速发展,传统的互联网协议越来越难以满足物联网的需要,体现在:移动网络代价昂贵,带宽低、可靠性差;在嵌入设备中运行,处理器和内存资源有限;海量在线设备产生庞大数据,给云端带来很大的网络开销和处理压力。

MQTT如何工作

  MQTT包括客户端、代理(broker)两部分,以智能家居系统为例,末端智能电器与手机为客户端,云中心为代理。客户端首先向代理发起请求,代理收到后对客户端认证,认证通过后在客户端与代理之间建立一个TCP长连接通道,客户端通过该通道订阅若干关注的主题(Topic),同时在自身状态变化时,向相应的主题发布消息,代理将该消息发给正在订阅该主题的所有客户端,如下图。与HTTP不同,MQTT是一种多对多的通信协议,设备直接不直接相连,而是通过一个代理实现互相通信。它是一种天然的异步协议,可以很好地将请求端与响应端解耦。

MQTT协议有什么好处

  MQTT针对物联网场景优化设计,考虑了网络的可达性,消息的连通性,能耗等方面。具体来讲:

  一是它本身是特别轻量级的,使用一个8位的系统、30K的空间,就可以运行MQTT的客户端。

  二是它针对不稳定网络而设计,通常意义上的传输协议都是基于稳定网络的传输的,会专门为了这种稳定的网络去做一些优化。MQTT正好相反,协议较多地考虑了网络的不确定性,它本身还非常精简,最小的传输字节只有两个,使得在较恶劣的网络条件下仍然有较好的消息可达率。

  三是它的消息的交互模式跟传统意义上不太一样,它采用了发布和订阅的模式。当数据源发布一条消息的时候,可以有多个订阅端同时能收到这个消息,这对于很多设备互联的物联网场景比较灵活。

  四是有消息发布服务质量(QoS)机制,用户可根据应用场景需要,选择“至多一次”、“至少一次”或“只有一次”的传输质量,在效率与质量之间进行权衡。

  五是客户端异常中断的通知机制(Last-Will-And-Testament)。当一个设备连不上的时候,服务器端有一个专门的机制能马上知道这个设备出了什么状况,从而可以非常快的反馈,对某一个结点做出一些补偿。

MQTT取得了哪些成功实践

  1.物联网云

  Evothings:国外物联网生态平台,提供全套的软硬件开发工具,帮助开发者构建智能硬件原型、开发消息推送服务。

  Yeelink:国内最大的物联网云平台之一,为用户和智能硬件开发者提供传感器云服务,并通过实时数据处理, 实现可靠的状态监控。

  2.实时消息推送

  Facebook是较早大规模采用MQTT 协议的互联网巨头,其在移动客户端中使用MQTT来更新通知、消息和书签等。

  云吧等平台借助MQTT 协议提供实时消息服务,实时推送消息到任意设备、快速的给上百万用户发送消息,实现单台设备一对一推送,实时展示在线用户、使用情况。目前在为几万开发者、上亿终端提供推送服务。国内搜狐等企业也使用了MQTT作为Android手机客户端与服务器端推送消息的协议。

MQTT还有哪些问题

  1.在网络变化频繁或者不太稳定的2G/3G网络环境下表现不佳。

  客户端在每次TCP断开或断网后,会即刻发起TCP重连,连接成功后依次发送CONNECT命令、订阅SUBSCRIBLE命令,当网络频繁切换或者不太稳定时,上述机制一定程度上加重已经不堪的弱网络负担。一些参考资源指出在业务层面进行重连策略、等待超时等调整可优化该问题。此外,CoAP等其他基于UDP传输的物联网协议对这类网络具有更好的适应性。

  2.针对没有TCP/IP支持的终端环境MQTT无法应用。

  可以采用MQTT-SN(MQTT For Sensor Networks)协议进行补充,它是为了非常受限类似传感器设计的,能够基于IEEE 802.15.4等无线局域网发送UDP数据包,再通过MQTT-SN网关与MQTT broker建立连接。流程架构大致如下:

MQTT推荐资源

  Mosca:基于Nodejs实现的一款功能较完善的broker

  Paho: C/C++、Python、Java等语言的MQTT 客户端库

  mosquitto:一款功能完善的开源原生broker

版权声明:原文出处:http://mt.sohu.com/20160310/n439960879.shtml?qq-pf-to=pcqq.c2c,作者:海鑫科金,感谢原作者的辛苦创作,如转载涉及版权等问题,请与我们联系(公众号:数通畅联,QQ群:299719834)将在第一时间处理,谢谢!

海鑫智圣:物联网漫谈之MQTT协议的更多相关文章

  1. MQTT是IBM开发的一个即时通讯协议,构建于TCP/IP协议上,是物联网IoT的订阅协议,借助消息推送功能,可以更好地实现远程控制

    最近一直做物联网方面的开发,以下内容关于使用MQTT过程中遇到问题的记录以及需要掌握的机制原理,主要讲解理论. 背景 MQTT是IBM开发的一个即时通讯协议.MQTT构建于TCP/IP协议上,面向M2 ...

  2. 【转载】MQTT学习笔记——MQTT协议体验 Mosquitto安装和使用

    http://blog.csdn.net/xukai871105/article/details/39252653 0 前言     MQTT是IBM开发的一个即时通讯协议.MQTT是面向M2M和物联 ...

  3. MQTT协议学习研究 & Mosquitto简要教程(安装和使用)

    若初次接触MQTT协议,可先理解以下概念: [MQTT协议特点]——相比于RESTful架构的物联网系统,MQTT协议借助消息推送功能,可以更好地实现远程控制. [MQTT协议角色]——在RESTfu ...

  4. 物联网MQTT协议分析和开源Mosquitto部署验证

    在<物联网核心协议—消息推送技术演进>一文中已向读者介绍了多种消息推送技术的情况,包括HTTP单向通信.Ajax轮询.Websocket.MQTT.CoAP等,其中MQTT协议为IBM制定 ...

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

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

  6. 物联网通信协议——比较-MQTT、 DDS、 AMQP、XMPP、 JMS、 REST、 CoAP

    物联网通信协议——比较-MQTT. DDS. AMQP.XMPP. JMS. REST. CoAP   AMQP & MQTT & DDS (https://www.youtube.c ...

  7. 物联网项目开发必读 深度分析MQTT协议优缺点

    物联网并不仅仅是一种网络,而是一个新的生态环境,它描述的本质是越来越多的使用物品通过网络连接在一起并可使用单个或者多个的终端设备对它们进行各种控制和使用—当然,工业上的物联网通常连接到的石鼓传感器或者 ...

  8. 玩转OneNET物联网平台之MQTT服务④ —— 远程控制LED(设备自注册)+ Android App控制

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  9. 玩转OneNET物联网平台之MQTT服务③ —— 远程控制LED(设备自注册)

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

随机推荐

  1. 百度MIP页规范详解 —— canonical标签

    百度MIP的规范要求必须添加强制性标签canonical,不然MIP校验工具会报错: 强制性标签<link rel="/^(canonical)$/"> 缺失或错误 这 ...

  2. Vue.js 2.0 和 React、Augular等其他框架的全方位对比

    引言 这个页面无疑是最难编写的,但也是非常重要的.或许你遇到了一些问题并且先前用其他的框架解决了.来这里的目的是看看Vue是否有更好的解决方案.那么你就来对了. 客观来说,作为核心团队成员,显然我们会 ...

  3. MVC Core 网站开发(Ninesky) 2、栏目

    栏目是网站的常用功能,按照惯例栏目分常规栏目,单页栏目,链接栏目三种类型,这次主要做添加栏目控制器和栏目模型两个内容,控制器这里会用到特性路由,模型放入业务逻辑层中(网站计划分数据访问.业务逻辑和We ...

  4. .NET Core的日志[2]:将日志输出到控制台

    对于一个控制台应用,比如采用控制台应用作为宿主的ASP.NET Core应用,我们可以将记录的日志直接输出到控制台上.针对控制台的Logger是一个类型为ConsoleLogger的对象,Consol ...

  5. 关于面试题 Array.indexof() 方法的实现及思考

    这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...

  6. 13、零配置Struts2开发

    Convention 插件 从 Struts 2.1 开始, Struts 可以使用 Convention 插件来支持零配置: Convention 插件完全抛弃配置信息, 不仅不需要使用 strut ...

  7. 谈谈一些有趣的CSS题目(九)-- 巧妙的实现 CSS 斜线

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

  8. 自己实现一个javascript事件模块

    nodejs中的事件模块 nodejs中有一个events模块,用来给别的函数对象提供绑定事件.触发事件的能力.这个别的函数的对象,我把它叫做事件宿主对象(非权威叫法),其原理是把宿主函数的原型链指向 ...

  9. duang~免费的学习视频来啦:学霸君之全栈测试

    学霸君向童鞋们推荐一款 同名学霸学习 视频教程 重点是完全免费收看学习噢!!! 今天 学霸君推荐腾讯课堂的学霸君之全栈测试 复制下方链接至腾讯课堂中报名学习 https://ke.qq.com/cou ...

  10. (翻译)FIFO In Hardware

    翻译一些自己觉得有价值的材料,工作中碰到英语大多数是读,基本没有写或者翻的,翻得不好不到位的敬请指摘. 同时也附原文以供参考. http://electronics.stackexchange.com ...