MQTT浅析

出于工作需要,最近对MQTT进行了学习,在这里总结一下。

MQTT是“Message Queuing Telemetry Transport"的英文缩写,是IBM开发的一个即时通讯协议,是一个轻量级的,基于代理的”发布/订阅“模式的消息传输协议,截至现在的发布版本为V3.1.1,支持多种编程语言,如PHP,JAVA,Python,Node.js,C,C++等,而且特别适合应用于物联网通信领域,目前国内外也有很多物联网平台在部署应用。

什么是”发布/订阅“模式?在MQTT协议中,有发布者,订阅者和代理(broker)三种角色,消息由发布者通过topic发布,由订阅者对感兴趣的topic进行订阅,一个发布者可以对应多个订阅者,一个订阅者也可以订阅多个topic,另外,订阅者也可以是发布者,发布者也可以是订阅者,这样就实现了"M2M"(Machine to Machine)的通信。broker类似于邮局或者说信差的角色,它的主要作用就是接收信件并投递给订阅信件的人。如果订阅者不在线,也就是说没有connected to the broker,那么消息会保留,等订阅者在线时投递,类似于QQ。

MQTT比传统的通信方式(比如TCP/IP)有什么优势?或者说为什么选择MQTT?例如,我们之前项目中经常用socket基于TCP/IP或者UDP进行数据的上传,为什么不直接这样使用呢?事实上,MQTT就是基于TCP/IP之上建立通信的,其底层的connect机制就是TCP/IP,如果我们对物联网这种应用场景,采用TCP/IP进行自下而上的开发,需要做大量其它的工作,比如client客户端,服务器端程序,以及对网络延迟、即时性以及用户是否在线的处理,而这些MQTT都已经做了大量的工作和优化,这时采用MQTT,它的优势就显现出来了。


MQTT提供了怎样的安全机制来确保消息传输的安全?MQTT在V3.1.1后,其在CONNECT消息里提供了user和password字段,但值得注意的是,MQTT只提供了这种用户名和密码的验证机制,具体实现需要借助第三方或另外开发,比如Auth0。此外,用户名和密码是明文传输的,可以通过TLS或SSL对用户名和密码进行加密传输。

MQTT的QoS机制以及它们的应用场景?MQTT提供了三种QoS机制,第一种是至多一次传输(At most once delivery),这种方式可能会有数据丢包,适用于允许个别数据丢失的场景;第二种是至少一次传输(At least once delivery),这种方式可能会有数据包的重复;第三种是精准一次传输(Exactly once delivery),这种方式只能传输一次并且保证送达,适用于金融支付类不允许丢包和重复的应用场景。

最后,在应用过程中,也总结了下目前比较活跃的基于MQTT的开源项目,如下:

1.Mosquitto---https://mosquitto.org/

2.Mosca---http://www.mosca.io/

欢迎大家扫描下方二维码关注我的个人微信公众号,一起交流学习,谢谢。


随着家电设备的智能化,家电设备能够通过传感器感知周边环境,能够提供更加优良的用户体验。与此同时,随着互联网的浪潮以及智能手机性能以及体验的不断发展,智能手机已成成为人们连接网络的主流终端。而物联网的不断发展,家电设备可以接入到网络中,这样智能手机可以随时通过网络查看设备状态、发送控制命令。目前市场上的手机控软件都是和智能设备一对一绑定,若有多个设备就需要多个手机应用软件进行管理。若能设计一种能够整合不同设备信息,并由一款应用软件进行统一管理的系统,将极大提高用户的使用体验,使得智能家居越来越普遍。 在这种需求的驱动下,本文设计并实现了一套基于 MQTT 推送协议的通用智能家居管理系统,解决硬件设备和信息上的异构性,提供一款可以显示并控制多种设备的手机应用软件。该系统包括基于树莓派系统的网关、基于 Openwrt 系统的系统服务端和iOS 智能手机作为控制端,整合多种家电设备的控制于一体,提供通用化的管理系统平台。 本系统通过在系统服务端与家电设备之间添加网关设备以连接不同通信方式的家电设备,将设备信息规格化通过 Wifi 通信上传到系统服务端,以此解决硬件上的异构性。在信息整合上采用元编程的方式解决信息上的异构性,对设备和设备属性进行分类抽象,极大提高了系统整合不同设备以及设备属性上的扩展性。同时抽象化的设备和设备属性显为手机端界面示的统一化提供了数据基础,能够将数据直接映射iOS系统 UIKit 的显示控件上,让手机端在界面设计时,可以通过预先设定映射匹配方式,快速添加新设备新属性,无需再通过代码添加。通过这种在硬件以及信息管理上的通用方案,本系统能够建立起一个可以适用于大部分家电管理的平台。在信息共享以及传输上,本系统采用 MQTT 推送协议作为通信方式,由于本系统中多数设备都属于嵌入式设备,设备的计算资源十分有限,而 MQTT 推送协议对系统 CPU 以及内存资源的低占用率正适用于本系统。 最后本文对系统的各个模块特别是手机端模块进行了黑盒测试,验证系统的可行性以及可靠性。同时,也对采用 MQTT 推送协议的通信方案和采用 HTTP 长连接方案进行性能上的测试和对比,包括内存占用、CPU 占用率和能耗等三个方面。结果显示MQTT 推送协议方案在三个方面都占有优势,达到了设计要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值