1.什么是MQTT 协议
MQTT 协议的全称是 Message Queuing Telemetry Transport,翻译为消息队列传输探测,它是 ISO 标准下的一种基于发布 - 订阅模式的消息协议,它是基于 TCP/IP 协议簇的,它是为了改善网络设备硬件的性能和网络的性能来设计的。MQTT 一般多用于 IoT 即物联网上,广泛应用于工业级别的应用场景,比如汽车、制造、石油、天然气等。
2.MQTT 协议优缺点
优点:
- 更加简单:MQTT是一种消息队列协议,使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合,相对于其他协议,开发更简单;
- 网络稳定:工作在TCP/IP协议上;由TCP/IP协议提供稳定的网络连接;
- 轻量级:小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;适合低带宽,数据量较小的应用;
- 易于实现:MQTT协议的服务端程序已经非常成熟,PHP,JAVA,Python,C,C#等系统语言都可以来向MQTT发送相关消息;
- 开放性:源代码开放,都可以用,也进一步推动了MQTT的发展,百度云、阿里云、中国移动onenet等几乎所有的开放性物联网平台都支持MQTT;
缺点:
- 不支持文件和AV
- 不支持与第三方HTTP集成
- 不支持负载分配
- 不支持用户管理界面
- 不支持点对点通信,并且使用标准的MQTT协议
- 不支持群组通信或群组管理,而是实现群组成员的管理
3. MQTT client 和MQTT server 理解
1. MQTT client : 向server 订阅对应的主题消息内容,并获取到订阅的相关主题消息或者发布相关的主题消息给server。
2. MQTT server :主要用于与多个客户端保持连接,并处理client (客户端)的发布和订阅等逻辑。一般很少直接从server (服务端)发布消息给客户端(如果要发布消息,可以使用
mqttServer.Publish(appMsg);
直接发布消息给client),多数情况下server 都是转发client 已订阅主题消息给对应的client,在系统中起到一个中介的作用。
4.MQTT 协议与TCP/IP 协议的联系
- MQTT 协议是属于应用层的协议
- TCP/IP 协议是属于传输层的协议
5.MQTT Serve和MQTT Client 发布和订阅消息测试
1.首先下载MQTT Serve 测试工具HslCommunication
1.1 开启一个MQTT 服务端
1.2 再开启一个测试的客户端,并连接进来
1.3 开启我们的写的客户端,端口号同样是1883
1.4 在服务端可以到看,2个客户端连接进来了
2. 进行消息发布和订阅测试
2.1 客户端1,订阅一个主题消息为香蕉的主题。客户端2,订阅一个主题消息为苹果的主题。怎么理解这个测试呢?就是当消息的发布者,在发布消息的时候,如果主题是香蕉,服务端就会把这个消息只发给客户端1,而客户端2则不会收到主题消息为香蕉的消息。明白了吧!
2.2 客户端2开始发布主题消息
2.3 客户端1 发布主题消息
2.3 服务端向客户端发布消息
总结:
1.服务端也能向客户端发布消息,但服务端的作用一般是用于消息的转发。并把对应的主题消息转发给对应的客户端。
2.客户端可以做为消息的订阅者,也可以做为消息的发布者
源代码已上传到 CSDN 为开发者提供的开源项目创新服务平台 gitcode
参考文献:
https://zhuanlan.zhihu.com/p/268113708
https://zhuanlan.zhihu.com/p/342874157
https://blog.csdn.net/panwen1111/article/details/79245161
https://blog.csdn.net/yuming/article/details/125834921