物联网(IoT)设备是一类依赖互联网进行信息传输的机器,其工作基于其特定任务。这些设备范围广泛,包括微波炉、洗衣机、灯具等各种家居设备,随着智能手机的普及,它们甚至在车辆中也变得常见。如果按照当前的趋势来看,几乎所有事物都将逐渐变成IoT设备。例如,小米米家和天猫精灵等智能家居设备的普及就展示了IoT如何像手机一样渗透到我们的生活中。然而,随着这项技术的不断发展,支持其运行的通信协议也必须不断演进。虽然在数据通过网络传输时可能会涉及多种通信协议,但在IoT领域,主要采用的协议主要有HTTP、Websockets和MQTT。而随着HTTP/2作为较新的参与者进入这个领域,重新评估其在IoT中与Websockets和MQTT相比的适用性是很有必要的。
HTTP/2
HTTP/2是HTTP协议的现代修订版本,它起源于谷歌的一个实验项目,名为SPDY,旨在提高浏览器端和服务器端的通信速度。HTTP/2的基本原理与HTTP/1.x相同,但通过改进网络和服务器端资源的利用,旨在降低终端用户感知到的延迟。换句话说,它就是HTTP/1.x的升级版本,速度更快。具体来说,新协议采用了多路复用技术来处理TCP请求,而不像HTTP/1采用了有序和阻塞的格式,这可以减少数据拥塞,提高性能。此外,HTTP/2采用了二进制格式,而不是文本格式,因此比其基于文本的前身更加紧凑。最后,HTTP/2还引入了服务器推送功能,这使得它可以向客户端推送数据,而无需等待客户端的请求,这一点之前通常需要Websockets来实现。因此,HTTP/2在IoT领域应该能够胜任,因为它的紧凑传输和低开销将减轻硬件在内存和电池消耗方面的压力。
Websockets
Websockets是一种协议,用于在Web浏览器(或类似软件)与Web服务器之间进行握手,从而减少使用HTTP进行双向通信时的开销。与HTTP/1采用的请求-响应模式不同,Websockets采用双向通信,非常适用于需要实时监控和频繁更新的系统。虽然Websockets自2008年以来一直存在,但它们相对较新,因此还未完全成熟。
随着HTTP/2引入双向或全双工通信功能,Websockets的需求可能会逐渐减少,至少在IoT领域是如此。实际上,过去几年中,一直存在一个问题,即HTTP/2是否会使Websockets变得过时。答案是“不完全如此”,因为HTTP/2引入的服务器推送功能虽然可以向客户端传输数据,但不会直接推送到客户端应用程序。因此,许多设备仍然需要类似Websockets提供的握手过程。因此,将Websockets视为“过时”的说法有些过于绝对,更准确的描述应该是它们在某些情况下可能“不再必要”。
MQTT
消息队列遥测传输(MQTT)是一种轻量级协议,由IBM发明,旨在促进机器之间的通信。它采用发布和订阅模型,以确保不同平台之间的高效通信,并提供消息优先级的级别控制。尽管目前尚未标准化(正在通过结构化信息推进组织(OASIS)进行标准化),但由于其小巧的协议头和低带宽消耗,MQTT已广泛用于IoT和大规模通信。尽管尚未标准化,但MQTT已经被Facebook Messenger、Amazon Web Services和Microsoft Azure的IoT Hub等大公司采用,成为首选的IoT通信协议。MQTT的紧凑协议头和服务质量(Quality of Service,QoS)功能旨在基本层面上实现可靠的机器对机器通信,几乎不需要额外的工作来确保顺畅运行。MQTT中的QoS功能意味着每条消息都有三个级别的检查来确保消息的可靠传递。这些级别在逐级提高时会增加带宽使用,但在关键传输方面提供了最高级别的保障。
哪种协议最适合物联网?
大多数人认为最佳协议取决于您的具体需求,但也有人认为这些协议适用于不同的应用领域,难以进行直接比较。然而,所有三种协议的关键因素都是它们如何有效地利用资源,例如带宽和电池寿命,以及它们的功能多样性。因此,总的来说,对于IoT而言,MQTT
可能是最佳选择。因为HTTP/1.x和Websockets并没有专门设计用于机器对机器通信。Websockets通常不适合IoT,特别是在智能家居等场景中,因为在机器对机器通信中,第二个“机器”通常无法支持Web客户端软件。而HTTP/2虽然是新兴的协议,但在得到广泛应用之前,还不能被视为成熟的MQTT协议的可靠替代品。