玩转物联网之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)协议 建 ...
随机推荐
- MFC设置单文档保存格式以及标题
在使用MFC编写单文档程序时,有时候需要将编辑的内容序列化为文件,使该文件可以直接以自己的程序打开,这时候需要在保存时将文件后缀改为我们想要的格式. 步骤 打开String Table,找到IDR_M ...
- C++ MFC棋牌类小游戏day4
根据昨天的计划,今天开始做下面的内容. 1.鼠标点击事件 2.点击坐标进行处理.(坐标转换) 3.判断选中的位置是否有效. 4.确定选中的棋子,设置棋子的状态和棋子所在坐标的状态. 5.判断移动是否有 ...
- kaldi实例脚本运行
Getting started, and prerequisites. rm/s5/run.sh Data preparation 如果有GridEngine, train_cmd="que ...
- Vue自定义指令,ref ,sync,slot
一.自定义指令 vue中可以自己设置指令,通过directive来实现,有2种创建方式,一种是局部创建,一种是全局创建. 第一种:局部创建 如果想注册局部指令,组件中也接受一个 directives ...
- 开发微信小程序——古龙小说阅读器
概述 由于面试的关系接触了一下微信小程序,花了2晚上开发了一个带书签功能的古龙小说阅读器,并且已经提交审核等待发布.这篇博文记录了我的开发过程和对微信小程序的看法,供以后开发时参考,相信对其他人也有用 ...
- python中使用双端队列解决回文问题
双端队列:英文名字:deque (全名double-ended queue)是一种具有队列和栈性质的抽象数据类型. 双端队列中的元素可以从两端弹出,插入和删除操作限定在队列的两边进行. 双端队列可以在 ...
- 使用create-react-app 快速构建 React 开发环境以及react-router 4.x路由配置
create-react-app 是来自于 Facebook,通过该命令我们无需配置就能快速构建 React 开发环境. create-react-app 自动创建的项目是基于 Webpack + E ...
- 21天打造分布式爬虫-Selenium爬取拉钩职位信息(六)
6.1.爬取第一页的职位信息 第一页职位信息 from selenium import webdriver from lxml import etree import re import time c ...
- Linux内核源码分析之调度、内核线程模型 And Centos7.2's Kernel Resource Analysis
本文分为概述.历史.el7.2代码架构图解三部分. 解决的问题: a.Kernel调度发展过程: b.以架构图的方式,详解el7.2具体调度实现.内核线程模型.调度时间片计算,以及探究整个Kernel ...
- h5端呼起摄像头扫描二维码并解析
2016年6月29日补充: 最近做了一些与表单相关的项目,使用了h5的input控件,在使用过程中遇到了很多的坑.也包括与这篇文章相关的. 首先我们应该知道使用h5新提供的属性getUserMedia ...