前面章节介绍过,MQTT协议和CoAP协议都是物联网中比较流行的协议,都对传输量做了很大的精简,传输开销小,以适应物理网的网络环境。
XMPP协议也有人说是适合物联网通信的,但它是基于XML,对于嵌入式硬件设备来说,实现XML解析是非常困难和消耗资源的。
还有大家熟知的HTTP协议,它对于嵌入式硬件设备来说应该属于重量级,也不太合适。目前很多物联网设备都是资源受限型的,内存空间和计算能力都很有限。
◇
关于MQTT协议和CoAP协议比较的文章网络上有很多,我们下面从应用场景要求的层面,分析该如何选择使用哪种协议。
1、服务端主动发送给客户端的数据(反控)的时效性(如通过APP控制硬件动作)
因MQTT协议是保持连接的,所以及时性相对很好;CoAP协议是无连接响应式通讯,因此不能主动推送,要等客户端访问才可以携带回去,及时性相对较差。
2、设备环境对底层协议的要求或限制
MQTT协议是建立在TCP协议基础之上的,因此他也具备TCP协议的优缺点;CoAP协议是建立在UDP协议基础之上的,因此他也具备UDP协议的优缺点。
3、在NAT网络环境中是否需要调整
因MQTT协议是保持长连接的,所以在NAT下没有问题;CoAP协议因是无连接方式,需要使用NAT穿透性手段。
4、实现多对多的通信还是单对单通信
因MQTT协议的消息模型是发布/订阅式的,所以是可以多对多通信的;CoAP协议的消息模型是请求/响应式的,所以是单对单通信。
5、服务质量等级及自动重连重发
因MQTT协议有QoS配置,支持服务质量等级和自动重连重发机制;CoAP本身不具备,需要应用层自己来写这个逻辑。
6、对网络稳定性要求
MQTT协议利用自动重连重发机制解决网络不稳定问题,断网就会触发重连;CoAP协议只有客户端发送的时候需要保证网络连接正常,其他时段无需连接。
7、对硬件设备的功耗影响
MQTT协议因有保持连接,所以功耗略高于CoAP协议。
◇
综上所述,根据实际项目要求,参考选择。如果有反控要求,尽量选择MQTT协议,但是如果是使用电信的NB-IoT,则不需要处理硬件到服务端的传输协议,已经集成在模块中,而且只能是CoAP协议(目前是这样),也就忽略协议选择这步。我们应用服务器与电信物联网服务器进行API通讯即可。如果是通过WiFi模块、有线宽带、4G无线网等就需要考虑这步的协议选择了。
本人亲历的项目中大部分都需要反控,所以选择了MQTT协议(如不需要反控,我会优选CoAP协议)。这个系列里我们也是以MQTT作为传输协议进行讨论,有关CoAP协议的相关内容大家可以网络搜索了解一下,我们前面先不涉及这方面内容。
本节完,待续......