最近,我们的后台收到了许多用户的私信咨询,其中一个问题便是:在物联网(IoT)应用中,为何通常更倾向于使用MQTT而非HTTP呢?今天我们就来探讨一下这个话题。
前面在介绍MOTT协议的时候我们就已经提到过,MQTT属于一种轻量级的消息传输协议,其协议头相当简洁。正常情况下,MQTT的固定头部仅有2个字节,用来标识消息类型、QoS(服务质量)等级等基本信息。在某些特定的消息类型里,也许会存在可变头部与消息体,不过整体结构较为紧凑。
然而HTTP协议的消息头则相对复杂一些。即便是最简单的HTTP请求,例如“GET”请求,其头部信息也包含请求方法、URL、协议版本、主机信息、用户代理等诸多字段。一般而言,一个基本的HTTP头部大小可能会达到几百字节。
下面我们就来说说这两者在物联网应用中的具体差异。
一、传输模式
MQTT运用发布/订阅模式。设备充当发布者(Publisher),把数据发布至特定的主题(Topic),而订阅者(Subscriber)只需订阅自身感兴趣的主题,就能接收相关数据。在此种模式下,数据传输基于事件驱动。只要存在订阅这些主题的应用程序或者设备,就能够实时接收数据。并且,在设备状态无变化时,无需发送额外的数据,从而减少了不必要的网络流量。
2、HTTP
HTTP属于典型的请求/响应模式。客户端(一般为物联网设备或者用户端应用)要向服务器发送请求,服务器依据请求内容予以响应。这表明每次获取或者更新数据,都需要完整的请求 - 响应流程。服务器收到请求后返回设备的状态信息。若要频繁获取设备状态,就需不断发送请求,每个请求均带有完整的头部信息,这会产生大量的重复数据传输,占用较多带宽。
二、数据传输效率
因为MQTT协议简洁,并且采用高效的发布/订阅模式,所以在传输数据时能更有效地利用网络带宽。尤其在传输小数据量的物联网应用场景下,例如传感器数据的定期上报时,MQTT的优势更为显著。每次传输的数据主要为电量数值,协议开销小,能够快速、高效地完成数据传输,从而减少网络带宽的占用。
2、HTTP
HTTP的效率比较低,在频繁进行数据交互的场景中尤其如此。由于每次请求与响应都要传输大量的头部信息,即便数据本身可能很少,也会让整体的数据传输量变大。这些多余的头部信息会降低传输效率,占用较多的网络带宽。
三、连接建立过程
MQTT协议构建于TCP协议之上,当设备与服务器之间的连接建立起来后,此连接能够长时间维持。这种长连接机制让设备在有数据传输需求时,仅需发送简单消息,而不必重新建立连接。连接建立的开销只在初始阶段出现,后续的数据交互会更加迅速。
2、HTTP
HTTP属于一种无状态协议,每一次数据请求都得重新建立连接。这一过程会涉及到TCP的三次握手,从而产生一定的延迟。每一回通信都要重新构建一条通信链路,其中包含发送请求头、等待服务器响应等步骤,这使得延迟相对较高。
四、消息推送机制
MQTT采用发布/订阅模式,服务器可主动向订阅特定主题的设备推送消息。这种实时推送机制让设备能在第一时间接收到重要信息。借助MQTT,服务器能够实现实时的事件通知,延迟可控制在很低的水平,一般能在几百毫秒内完成消息推送。
2、HTTP
HTTP自身并不具备主动推送消息的功能。在物联网应用场景下,若要获取设备的最新状态或者接收来自服务器的通知,往往需要运用轮询的方式。这种轮询方式所产生的延迟取决于轮询的间隔时长,并且在两次轮询的间隙可能会遗漏实时消息,实时性不佳。
五、数据更新效率
因为设备与服务器之间为长连接,而且消息格式较为简洁,所以当设备状态改变时,MQTT能够迅速地把更新后的状态信息发送至服务器,整个过程的延迟比较低,非常好地满足实时性要求。
2、HTTP
HTTP 每次更新数据都需要完整的请求 - 响应过程,这使得数据更新效率相对较低。尤其是在需要频繁更新少量数据的情况下,由于每次都要建立连接和传输完整的请求头,会导致设备状态的更新不能及时反映在用户界面或者其他相关设备上,实时性大打折扣。
六、可靠性
发布订阅模式:即便处于网络连接不稳定的状况下,也可达成数据的可靠传输。当设备离线时,MQTT会把数据存储于队列之中,直至设备重新上线时再予以发送。
自动重连机制:具备自动重连机制,即便网络断开,也能够自动恢复连接,确保消息得以可靠传输。
QoS机制:提供三种等级的服务质量,范围从至多一次到恰好一次不等,能够依据不同的应用场景以及数据的重要性,选择适宜的QoS等级,以保证消息的可靠传递。
2、HTTP
本身不具备消息保证机制:HTTP自身并不提供消息重发或者持久化机制,通常这些问题需要应用层自行处理。
基于TCP的可靠性:主要依靠TCP协议自身的可靠性确保数据传输的完整性与顺序性,不过在网络不稳定或者出现故障的时候,或许需要应用层进行额外的处理并设置重试机制。
无状态性的限制:因为HTTP是无状态的,每个请求均相互独立,服务器不会留存之前请求的任何信息,在一些需要连续进行数据传输与处理的物联网场景下,这可能会对数据的连贯性和可靠性产生影响。
七、安全性
支持TLS/SSL加密协议:这能够确保数据传输过程中的安全性,防止数据遭受篡改与窃取。同时,MQTT 5.0还引入了增强认证机制以提供双向的身份确认。
认证与授权:通过用户名、密码字段实现对密码认证和Token认证的支持,从而确保只有合法设备能够接入MQTT代理,并且能够检查接入者可执行的操作,例如可以将消息发布到哪些主题以及能够从哪些主题获取消息。
2、HTTP
HTTPS:借助HTTPS协议,于HTTP之上添加SSL/TLS层,以确保数据在客户端与服务器之间加密传输,达成数据加密、身份验证以及数据完整性保护的目的。
安全配置:需采用更为复杂的安全举措,例如安全HTTP头部、安全的身份验证机制等,从而提升Web应用的安全性,防范跨站脚本攻击、跨站请求伪造等情况。
八、扩展性
多对多通信模式:支持多对多通信模式,这一模式十分契合大规模物联网设备的连接与数据交互需求,能够轻松扩展至大型系统。例如,在智能家居系统中,多个传感器与设备可借助MQTT协议相互通信并协同工作。
轻量级协议:MQTT的轻量级协议让实现MQTT库的成本较低,易于移植到不同平台,方便在各类物联网设备中集成与应用,为系统扩展提供了方便。
2、HTTP
可扩展性:HTTP协议自身具备一定的可扩展性,能够借助附加头部字段与参数来扩展功能,例如认证信息、缓存控制等。不过,在物联网应用场景下,针对大规模设备连接以及实时数据传输的情形,HTTP的扩展性就相对较差。
基于Web的扩展:主要应用于基于Web的应用和服务扩展,与现有的Web技术和架构有较好的兼容性,但是在处理物联网设备之间复杂的通信以及大规模连接时,或许会遭遇性能与可扩展性方面的挑战。
九、功耗
MQTT协议专为低功耗目标而设计。它在设计时考虑到了资源受限设备与低带宽网络环境的情况,目的在于实现设备间的可靠通信。该协议能够保持长连接,在空闲时处于低功耗状态,从而节省设备能源,延长电池供电设备的使用寿命。
2、HTTP
HTTP协议在设计之时并未着重考量低功耗这一因素。其头部信息较为完整且规模偏大,在应对频繁的小数据交换时,会造成较大的资源损耗。每一次HTTP请求均需构建新的连接,并且在请求完成之后断开连接。这种连接构建与断开的流程会消耗一定的能量,在物联网设备中更是如此,这种频繁的连接操作会大幅提升功耗。
MQTT在物联网应用中的传输模式、传输效率、连接建立过程、消息推送机制、数据更新效率、可靠性、安全性、扩展性、功耗等多个方面具备一定的优势。这些优势让MQTT成为连接众多物联网设备的理想之选,特别是在资源受限的情况下。与之相比,HTTP协议在物联网场景里就显得较为臃肿,不适用于对实时性和资源使用高效性有极高要求的应用。
————————————————
关注“美畅物联”,了解更多视频汇聚及AIoT底座解决方案。
4000520066 欢迎批评指正
All Rights Reserved 新浪公司 版权所有