在物联网应用中,为何选择MQTT而不是HTTP?
当我们深入探讨物联网(IoT)的应用时,会发现通信协议的选择至关重要。其中,MQTT和HTTP这两种协议常被提及。那么,为何在物联网应用中更倾向于使用MQTT而不是HTTP呢?爱陆通帮助您从MQTT的架构和特点入手,一探究竟。
MQTT架构
MQTT架构有两种角色:MQTT Broker(MQTT服务器)和MQTT Clients(发布者和订阅者)。MQTT Clients之间通过话题进行通信。MQTT Clients发布消息时,只能向指定话题发布消息,这时候它扮演发布者的角色。要接收消息,MQTT Clients必须先订阅相关话题,才能接收到该话题的发布消息(帖子)。话题的发布和订阅关系由MQTT服务器管理,根据消息的话题和订阅关系将消息转发给订阅者,实现通信。MQTT服务器的IP地址是固定的,可以认为发布者不知道谁会收听它的消息,发布者和订阅者彼此不知道对方的存在,他们不直接建立通信链路。因此,所有消息都是通过服务器基于话题进行转发。这种网络结构非常便捷,MQTT Clients随时随地都可以加入,只需知道服务器的IP地址。由于传感器通常是用于采集和传输数据,并偶尔接收命令和配置等操作。
更简单解释一下为什么物联网广泛使用MQTT协议而不是HTTP协议
首先,MQTT协议的报文非常简短,比HTTP协议的报文要短得多。除去传输数据本身的负载部分,MQTT协议的报文只有几个字节。你可能会问,报文占用字节少有什么实际好处呢?如果你的系统只连接了几个传感器(比如温度和湿度传感器),那么使用任何协议都差别不大。但是假设你的设备数量是成千上万台呢?每台设备每秒传输一次数据,那么累积节省的字节数就会非常可观。你还可能问,节省的字节数会带来什么好处呢?每次数据传输都需要占用网络带宽,所以节省下来的字节可以直接降低你的带宽使用量。如果你的系统部署在阿里云等按流量计费的云服务器上,这就相当于直接节省了你的费用。此外,简短的报文在资源受限的嵌入式设备上能够降低资源的占用,协议解析过程中不需要消耗太多的CPU和内存资源。虽然现在的设备都有过剩的资源,但我们仍然应该追求极致的性能。
乐发Vll其次,MQTT协议采用了发布-订阅模型。简单来说,发布-订阅模型允许多个接收端接收一条信息。想象一下以下场景:在家里有一个灯泡、一个红外传感器和一台普通摄像头,让你实现以下应用。
当红外传感器检测到有人闯入时,我们需要同时触发摄像头抓拍画面并打开灯。如果使用HTTP协议,我们需要启动一个HTTP服务器并将相关的代码逻辑(开灯和摄像头抓拍)写入相应的API中。实现逻辑可能会变得有些复杂。假设需求变化,不仅需要摄像头抓拍和开灯,还需要触发家里的蜂鸣器发出声音警报。这又需要修改一番代码…然而,如果我们基于MQTT发布订阅模型,灯泡、摄像头、蜂鸣器等设备只需要订阅相应的主题,它们会在第一时间同时接收到信息并执行对应的操作。即使在以后增加功能的情况下,扩展也会变得非常容易。
总结:MQTT的亮点在于数据报文简短且发布订阅模型的使用。