玩转物联网之MQTT
物联网概述
物联网——即Internet-of-Things,其实这个概念由来已久,简单来讲,物联网是物与物、人与物之间的信息传递与控制简称。它和能源、电子信息、医疗、交通、零售、物流、工业制造等行业息息相关。要实现物联网,首先需要将具备信息感知和通信能力的设备嵌入到我们关心的物品中,使其能连接到因特网或企业网络之上,实现互联互通。之后,互通的物品不仅要通过设备采集信息、实现智能的感知,更要结合一切先进的信息处理、数据挖掘等手段,与业务应用相结合,从后台到前端设备,实现智能的控制。一句话来理解物联网就是把所有物品通过信息传感设备与互联网连接起来,以实现智能化识别和管理。
MQTT简介
MQTT是一个由IBM开发的物联网传输协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带 宽和不稳定的网络环境中的物联网设备提供可靠的网络服务。MQTT是专门针对物联网开发的轻量级传输协议。MQTT协议针对低带宽网络,低计算能力的设 备,做了特殊的优化,使得其能适应各种物联网应用场景。
MQTT 既有完全高级版可以在 TCP/IP 上运行,也有简化版 MQTT-SN 用于非 IP 设备。其发布/订阅模式能够在让拓扑结构进行扩展的同时保留实时的特性以及服务质量的可配置性。
MQTT的设计思想是开源、可靠、轻巧、简单,MQTT的传输格式非常精小,最小的数据包只有2个比特,且无应用消息头。MQTT可以保证消息的可 靠性,它包括三种不同的服务质量(最多只传一次、最少被传一次、一次且只传一次),如果客户端意外掉线,可以使用“遗愿”发布一条消息,同时支持持久订 阅。MQTT在物联网应用中的优势有:
- 可靠传输。MQTT可以保证消息可靠安全的传输,并可以与企业应用简易集成。
- 消息推送。支持消息实时通知、丰富的推送内容、灵活的Pub-Sub以及消息存储和过滤。
- 低带宽、低耗能、低成本。占用移动应用程序带宽小,并且带宽利用率高,耗电量较少。
物联网接入的挑战
当前物联网领域的消息传输依采用单一的实施规范,它是在互联网基础上的延伸和扩展的网络,用户端从传统的计算机延伸和扩展到了任何物品与物品之间,物品通过嵌入的传感器进行信息采集,然后通过小型计算设备进行网络信息交换与通信。然而当前移动互联网正处于起步阶段,物联网中的数据传输会面临很多问题,比如在网络不稳定的情况下,如何保证数据的传输没有问题,如何保证数据不被重复发送,连接断开后如何进行重连。总体来说,物联网的接入会面临以下几个方面的挑战:
- 设备、传感器。物联网接入对终端采集和控制设备要求高,且终端的改造以及网络费用成本也比较高。另外,其对终端的能耗要求也比较高。
- 通信协议。设备往往不具备较高的计算能力和存储空间,因此很难支持诸如 HTTP、SSL 和 XML 这样的传输协议,它需要一套简单高效的传输协议以满足通信需求。
- 网络。现有的网络传输贷款参差不齐,传输网络不稳定。
- 信息安全。如何保证信息传输的安全以及业务层身份鉴别。
基于物联网的MQTT技术则恰好可以很好地弥补这一方面的缺陷,在云计算和移动设备之间架起一道桥梁,在低带宽和不稳定的网络环境中提供可靠的网络服务。
对于信息安全,并不仅仅是信息传输安全,物联网时代的安全是物理安全、信息采集安全、信息传输安全和信息处理安全的综合,物联网时代还需要一个强大的云以完成信息传输安全,信息处理安全以及信息的存储,分析等,当然您还需要一个强大的服务管理系统来管理您为了处理特定的业务逻辑而运行的服务。
使用MQTT连接云
设备使用MQTT客户端可以在特定的主题上发布消息,也可以通过订阅特定的主题以接收其他设备或者用户发布的消息,从而实现M2M,M2P,P2M的通信。
下图是使用MQTT作为设备接入协议的整体解决方案。
云网关gateway负责设备的接入,协议适配,消息转发等功能,如果要支持海量设备的接入,gateway集群是必须的。
设备管理负责设备接入认证,设备与用户绑定,操作授权等相关的功能。
账号管理负责用户账号安全认证,授权认证等相关的功能,同时也支持第三方账号安全认证。
云服务负责设备业务逻辑。不同的设备厂商都有一套自己的业务逻辑和服务,这种服务可以和容易的运行在云端提供的容器中,使用基于容器的微服务使得应用程序能够更快地进行创建,并且更易于维护,同时 又能够得到更高的质量。而数据的存储和分析使用云平台提供的通用的存储服务和大数据分析引擎。
用户只要注册账号,绑定设备,就可以通过手机APP,微信或者web等终端轻松查看设备信息,与设备进行交互操作。
此解决方案具有的优势有:
· 移动设备
能在 8bit 位处理器上很好的运行 C /JavaScript/Java 的 client 库分别只有 30/75/100KB
在移动设备上耗电率低,大约只需要 HTTP 的一半
· 很好的适应各种复杂网络,特别是受限网络
预期并适应频繁的网络中断,能应对低速、低质量的网络
压缩优化过后的协议,可以有效降低网络流量,从而节约网络成本
完成同样的数据通信,MQTT 只需要 HTTP 约 1/4 得数据流量
· 发布 - 订阅的消息通信协议,允许一条消息只发布一次,便可被多个消费端(应用程序 / 设备)所接收
实现系统间松耦合,简化开发,方便扩展,整合。
· 提供灵活便捷的系统整合能力
使用微服务+docker的方式,快速部署高效运行云端服务
提供可靠的设备管理和账号管理体系,您只需要关注核心业务
提供通用的数据存储和数据分析服务
提供与第三方云平台的对接功能
提供协议适配功能,客户端可以使用多种通信协议与设备进行通信。
· 提供丰富的安全性
使用 SSL 提供的认证和加密来保证传输安全性
采用账号安全认证+设备安全认证结合的方式保证内容安全
· 强大的性能提高系统的高可靠性
高连接数下系统低计算资源使用
高连接数下系统高信息处理速度
· 提供多种消息服务质量,满足不同场景需求
0 :消息最多被传递一次,比如一般类广告,通知
1 :消息会被传递但可能会重复传递,比如账户余额通知
2 :消息保证传递且仅有一次传递,比如交易支付批复通知
结束语
人类正走向“物联网”时代,但是这个过程可能需要很长的时间。毫无疑问,如果“物联网”时代来临,人们的日常生活将发生翻天覆地的变化。不管物联网如何发展,在未来几年,相信MQTT的应用会越来越广。
作者:贺大伟,AbleCloud云平台高级开发工程师。曾在大唐负责通信领域LTE协议一致性仪表软件开发,负责高性能10000兆安网闸捕包平台开发和参与网络分析系统架构设计开发。2014年加入AbleCloud,主要负责AbleCloud云平台设备接入网关和OTA升级分布式开发部署维护等工作,对分布式,高并发充满兴趣。
玩转物联网之MQTT的更多相关文章
- nodejs连接阿里云物联网套件(mqtt)
文档地址:https://help.aliyun.com/document_detail/73742.html 连接方法:先HTTPS认证再连接 /* *阿里云物联网套件nodejs连接示例 *C ...
- 干货分享丨玩转物联网IoTDA服务系列五-智能家居煤气检测联动
摘要:该场景主要描述的是设备可以通过LWM2M协议与物联网平台进行交互,用户可以在控制台或通过应用侧接口创建设备联动规则,把设备上报的属性转发,通过物联网平台规则引擎转变成命令下发给其他指定设备. 场 ...
- 干货分享丨玩转物联网IoTDA服务系列四-智能网关
摘要:该场景主要描述的是设备可以通过MQTT协议与物联网平台进行交互,用户可以在控制台产品详情中自定义Topic,通过应用侧接口或控制台创建数据转发规则,把设备上报的消息转发给其他华为云服务,供应用侧 ...
- 物联网网关MQTT应用与配置测试介绍
1.MQTT介绍: MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),作为除Modbus外最常用的协议之一,因其基于发布/订阅的模式,具有资源消 ...
- 物联网学习笔记三:物联网网关协议比较:MQTT 和 Modbus
物联网学习笔记三:物联网网关协议比较:MQTT 和 Modbus 物联网 (IoT) 不只是新技术,还是与旧技术的集成,其关键在于通信.可用的通信方法各不相同,但是,各种不同的协议在将海量“事物”连接 ...
- 物联网防火墙himqtt源码之MQTT协议分析
物联网防火墙himqtt源码之MQTT协议分析 himqtt是首款完整源码的高性能MQTT物联网防火墙 - MQTT Application FireWall,C语言编写,采用epoll模式支持数十万 ...
- 物联网微消息队列MQTT介绍-EMQX集群搭建以及与SpringBoot整合
项目全部代码地址:https://github.com/Tom-shushu/work-study.git (mqtt-emqt 项目) 先看我们最后实现的一个效果 1.手机端向主题 topic111 ...
- MQTT进阶篇
我们介绍了最流行的物联网协议MQTT的背景以及基本使用方法.在这篇文章中,我们会继续考察MQTT的高级玩法——与网页应用的交互.MQTT是基于TCP协议实现,基于HTTP的网页应用便无 ...
- MQTT——服务器搭建(一)
MQTT介绍 MQTT,是IBM推出的一种针对移动终端设备的基于TCP/IP的发布/预订协议,可以连接大量的远程传感器和控制设备: 轻量级的消息订阅和发布(publish/subscribe)协议 建 ...
随机推荐
- selenium之生成html测试报告--testng.xsl
自制版制作步骤: 1.首先下载一个文件名为testng.xslt-1.1.zip testng.xslt-1.1我在印象笔记里面备份了一份 打开testng.xslt中lib文件夹,找到saxon-8 ...
- Struts2学习第四天——全局结果,动态结果及异常映射
1.异常映射的配置 当Action方法出错时Struts会返回异常错误信息页面,这种页面方式是不友好的,可以使用try-catch捕捉异常,然后在catch块中返回对应的错误页面.这种为单个<a ...
- Apache Thrift的C++多线程编程定式
Facebook贡献给Apache的开源RPC组件Thrift有着广泛的应用,C++中使用Thrift也十分普遍,但由于Thrift的Handler会被多个线程调用,因而多线程中应用并不直接的友好,利 ...
- CPP之内存分配
new & delete expression 1. Introduction A new expression allocates and constructs an object of a ...
- AddTransient,AddScope和AddSingleton 有什么不同?
我们先来创建几个接口using System; namespace DependencyInjectionSample.Interfaces{ public interface IOperation ...
- 【接口时序】3、UART串口收发的原理与Verilog实现
一.软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE 硬件平台: 1.FPGA型号:XC6SLX45- ...
- 源设置导致Docker镜像构建失败
编写了一个Dockerfile,主要目的是构建一个镜像,镜像默认安装了openjdk-1.8-jre,还有另外一些包(这些包里面有dev版本的,也有release版本的),Dockerfile的内容大 ...
- django-celery 创建多个broker队列 异步执行任务时指定队列
一.这里不再详细述说 django 框架中如何使用celery, 重点放在如何实现创建多个队列, 并指定队列存放异步任务 笔者使用 django-celery==3.2.2 模块, 配置项及配置参 ...
- JavaScript高级程序设计--函数小记
执行环境和作用域链 每个函数都有自己的执行环境.当执行流进入一个函数时,函数 的环境就会被推入一个环境栈中.而在函数执行之后,栈将其环境弹出,把控制权返回给之前的执行环境. 当代码在一个环境中 ...
- IPv6技术详解:基本概念、应用现状、技术实践(上篇)
本文来自微信技术架构部的原创技术分享. 1.前言 普及IPV6喊了多少年了,连苹果的APP上架App Store也早已强制IPV6的支持,然并卵,因为历史遗留问题,即使在IPV4地址如果饥荒的情况下, ...