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/

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章