概述
今天突然想起来当时面试的时候被问了mqtt和http,自我感觉mqtt答的还行,http则是答的一团糟,所以打算整理一下,用来记录。
它们都是属于应用层的协议,且都是基于tcp/ip协议栈。
一.mqtt
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种轻量级的消息传输协议,特别适用于物联网(IoT)和移动应用等场景。做物联网相关项目mqtt使用的最多。
1.基于发布/订阅模式:MQTT采用客户端-服务器架构,支持一个或多个客户端向服务器发布消息,其他订阅了相关主题的客户端可以接收到这些消息。
2.轻量且简单:MQTT设计简洁,易于实现,使其在资源受限的设备上运行时占用的带宽小,对网络的要求低。
3.保持长连接:MQTT客户端可以与服务器建立长期连接,并通过心跳机制来维持会话状态,适合需要实时控制的场合。
4.适用范围广:由于其轻量级和低开销的特性,MQTT非常适合在网络带宽有限或设备存储空间有限的场合使用
我觉得mqtt最显著的优点就是轻量化和长连接,当时在学校的实验室第一次接触mqtt对其概念一直不是很清晰,与实验室同学讨论,他给我讲了一个很生动的例子mqtt协议就像up主和粉丝,分别是服务器和客户端,中间通过发布的网站(主题)连接,可以有很多粉丝(客户端)关注up主(服务器),同时up主发布视频粉丝也都能看到,且粉丝也可以向up主发送消息。
二.http
HTTP (Hyper Text Transfer Protocol,超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议。
1.HTTP基于请求-响应模式:这种模式下,客户端主动向服务器发送请求,服务器接收到请求后处理并返回响应。这个过程是同步的,意味着客户端需要等待服务器的响应。
2.普及且灵活:HTTP协议经过多年的发展,已非常成熟和稳定,有大量详尽的文档和资料可以参考,也有广泛的应用实践和社区支持。HTTP适用于无状态的、单向的数据传输,可以适应多变的网络环境和应用场景。
对于嵌入式http在应用方面我也只接触到了百度ai的api接口是http,之前也也用过云平台通过http传输图片,但是对其协议没有深入了解,只觉得相对于mqtt的订阅http在编程方面更加简单。
三.区别
1.与MQTT的发布/订阅模式相比,HTTP的这种模式适用于客户端需要从服务器获取数据的场景,而不太适合于需要实时、双向通信的物联网应用。在物联网应用中,设备可能需要不断地发送数据到服务器,而不需要等待响应,
2.对于需要快速、轻量级且面向消息传递的应用,MQTT是一个更好的选择;而对于灵活性和广泛兼容性更为重要的场景,HTTP则可能更加合适。