CoAP 的占用空间是否比 MQTT 低?

物联网 MQTT 沟通 协议
2021-06-15 02:24:10

我最近在Quora 上看到了一个关于 CoAP 或 MQTT 是否更轻量级的问题,但答案似乎并不是特别令人满意,而且都相互矛盾:最上面的答案说 MQTT 占用的资源更少,而下面的另一个说 CoAP 要求不高。

从我发现的情况来看,CoAP 的要求比MQTT有道理的,因为 CoAP 只需要 UDP,并且它的消息主要是即发即忘,不像 MQTT 在 TCP 上运行(因此会更多涉及)。

哪种协议需要最少的资源才能运行?


对于资源,我主要考虑所需的处理器能力、RAM 和要传输的数据。例如,在我链接的 Quora 问题中,最上面的答案指出,一个简单的ESP8266芯片可以运行 MQTT,它只有 80MHz 的处理器和不到 1MB 的 RAM。我很好奇 CoAP 是否可以在这样的环境中运行,或者在更受限的环境中运行。

我设想的那种用例是设备主要从另一个设备接收数据(例如打开/关闭命令),但可能需要很少(可能每小时几次)发送设备状态的更新. 我想使用尽可能少的处理能力来降低设备成本,并以相对低频率的方式传输以尽可能减少功耗。

2个回答

CoAP 和 MQTT 都具有相同的 RAM 使用量,以 10kbits [1] 为单位。

区别在于 CPU 和网络使用情况:[2]

每个客户端都支持 TCP 并保持对代理打开的连接。

因此,CoAP 占用空间更少,并且根据整个用例(偶尔的小数据),它似乎是您的最佳选择。

正如您所提到的,CoAP 使用 UDP。它不保证数据交付。它仍然在有损条件下表现“优秀”,而 MQTT 只是“好”。所以,我不会太担心。

资料来源:

[1] http://embedded-computing.com/articles/internet-things-requirements-protocols/

[2] http://www.altencalsoftlabs.com/blogs/2016/08/08/analyzing-mqtt-vs-coap/

上面的答案之一说 CoAP 使用 UDP,因此不保证数据传输。这并不完全正确。CoAP 有非确认模式和确认模式发送消息。在确认模式下,CoAP 将重试以确保交付。您可以调整超时和重试次数。未确认模式不会重试,并且是您上面提到的“即发即忘”模式。

在内存占用方面,代码本身可能需要 5-200k,具体取决于您使用的库和您使用的选项。运行时数据的使用取决于您使用的功能,例如确认模式、块传输、安全性、命名资源等。有关严格约束的试用版,请参阅https://www.mdpi.com/1424-8220/16/3/ 358其中 CoAP 部分的代码大约是 5k !