MQTT 与 HTTP 通信协议对比及项目应用场景选择

本文总结了 MQTT 与 HTTP 协议的区别、各自的适用场景,并结合项目案例说明了前后端通信选型理由。


==1. MQTT 通信与网络协议==

相关学习资料:

MQTT 示例代码(C):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
MQTTClient client;
MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
MQTTClient_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL);
int rc;
if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS)
{
printf("Failed to connect, return code %d\n", rc);
exit(EXIT_FAILURE);
}
char payload[100];
sprintf(payload, "Middle Data : %u, %u", red_data, ir_data);
MQTTClient_message pubmsg = MQTTClient_message_initializer;
pubmsg.payload = payload;
pubmsg.payloadlen = strlen(payload);
pubmsg.qos = QOS;
pubmsg.retained = 0;
MQTTClient_deliveryToken token;
MQTTClient_publishMessage(client, TOPIC, &pubmsg, &token);
MQTTClient_waitForCompletion(client, token, TIMEOUT);
printf("Message with delivery token %d delivered\n", token);

2.前后端交互(API)的使用

  1. 什么是API:
    API(应用程序编程接口,Application Programming Interface)是一组定义不同软件组件之间如何相互通信和交互的规范和协议。API 充当了不同软件系统之间的桥梁,使它们能够无缝协作,而无需了解彼此的内部实现细节。

如何理解API,API 是如何工作的-CSDN博客

3.HTTP和MQTT的选择

要区分什么时候使用MQTT,什么时候使用HTTP,我们需要弄清楚两者的本质和适用情况:

MQTT是长连接的,本质上是发布/订阅(Pub/Sub)消息传输协议,专门设计用于低带宽、不稳定网络环境中的物联网(IoT)应用。它基于TCP/IP协议,支持高效的消息传递。

MQTT通过持久连接(保持连接)进行通信。客户端与消息代理建立长连接,在整个会话过程中保持连接,这样可以在连接断开时恢复并继续接收消息。
MQTT为了减少带宽消耗,MQTT的消息头非常小,适合低带宽、高延迟的网络环境。它支持消息的质量服务(QoS)级别,确保消息传递的可靠性。

HTTP是一种请求/响应(Request/Response)协议,主要用于Web通信,基于客户端-服务器模型。HTTP通常用于浏览器与服务器之间的数据交换。
HTTP每次请求都会建立一个新的连接(虽然现代HTTP(如HTTP/2)支持连接复用)。
HTTP的连接通常在请求完成后关闭。
HTTP的消息头较大,适合传输结构化的数据(如HTML、JSON等),但在低带宽环境下可能表现不佳。

在本次项目里面,采集前端和后端的数据传输使用HTTP而不是MQTT,因为我们需要对数据进行打包处理,即把一次(读一段时间的数据)打包发送到后端,这样处理,方便后续的数据处理与分类。处理的数据以JSON格式发送,更适合HTTP的方式。
同时具有更强的鲁棒性,可以自行控制采集的时间以及发送的时间,而且采用HTTP的请求/响应模式,后端可以给采集前端发送是否接受到数据的信息,即采集前端可以知道数据传输情况,以便数据丢失的情况下可以在采集前端进行再次发送。

同时因为MQTT只是发布/订阅模式,这样采集前端就只是发布数据,至于后端的订阅有没有出问题,采集前端不好直接判断出来。同时考虑到MQTT具有较强的实时性,在此处也并不需要,因为只需要保证数据采集回来就行,所以采用MQTT会增加网络处理的压力。

MQTT 与 HTTP 通信协议对比及项目应用场景选择

https://garyaacm.github.io/2025/05/19/网络通信问题/

作者

Gary

发布于

2025-05-19

更新于

2025-05-19

许可协议

评论

:D 一言句子获取中...

加载中,最新评论有1分钟缓存...