mingdu.zheng at gmail dot com

首先,MQTT和CoAP没有好不好的问题,只有适合什么应用场景的问题。

MQTT

MQTT的特点是可以保持长连接,具有一定的实时性,云端向设备端发送消息,设备端可以在最短的时间内接收到并作出响应,所以MQTT更适合需要实时控制的场合,更适合执行器。要保持长连接,那么就要时不时地发送心跳包,这就不会省电了。所以低功耗的场合并不适合MQTT。MQTT的长连接需要建立在TCP的基础上,TCP协议的复杂性决定了对设备的要求是比较高一些的,相比UDP。

CoAP

CoAP的特点是低功耗,数据发完就可以休眠了。所以CoAP更适合数据采集的场合,更适合纯粹的传感器设备,特别是电池供电的传感器设备。基于UDP协议,对设备的要求比较简单。华为出的NB-IoT芯片就只支持UDP和CoAP,华为的决策告诉我们CoAP和NB-IoT是一对。

对比

协议

核心特点

下层协议

应用场合

硬件要求

MQTT

长连接

TCP

实时控制/执行器

较高

CoAP

低功耗

UDP

数据采集/传感器

较低

参考

​MQTT Wiki​​​​MQTT 3.1.1 specification​

​CoAP Wiki​​​​RFC7252: The Constrained Application Protocol (CoAP)​