MQTT是什么
MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。
MQTT基本原理
MQTT服务端
- MQTT服务端通常是一台服务器,可对MQTT信息的接收、储存、处理和发送。
- 负责将MQTT客户端发送来的信息传递给其他MQTT客户端(需要客户端订阅)。确保客户端之间的通讯顺畅,保证MQTT消息得以正确接收和准确投递。
- 负责管理MQTT客户端。
MQTT客户端
- 发布行为——向服务端发布信息。
- 接收行为——从服务端收取信息。需要先要向服务端“订阅”信息(即告诉服务端需要哪些信息)。
- 既可以作为信息发布者也可以同时作为信息订阅者。
MQTT主题
- MQTT服务端在管理MQTT信息通讯时,就是使用“主题”来控制的。
- 当某客户端向主题发送信息后,服务端会首先检查都有哪些客户端订阅了这一主题,再将信息转发给订阅了该主题的客户端。
MQTT 发布/订阅 特性
- 相互可独立。MQTT客户端是一个个独立的个体,它们无需了解彼此的存在,依然可以实现信息交流。
- 空间可分离。MQTT客户端在通讯必要条件是连接到了同一个MQTT通讯网络。这个网络可以是互联网或者局域网。只要客户端联网,无论他们远在天边还是近在眼前,都可以实现彼此间的通讯交流。
- 时间可异步。MQTT客户端在发送和接收信息时无需同步。当客户端离线后,MQTT服务端可以将主题的新信息保存,待客户端再次上线后,服务端再将信息推送给客户端。
连接MQTT服务端
第一步:发送连接请求
- CONNECT数据报文的作用:告诉服务端,客户端与服务端通信的模式。
- clientId:客户端ID。同一个服务端不可重复,客户端身份标识
- cleanSession:清除会话。true,告诉客户端不要保存任何会话内容;false,告诉客户端需要保存会话内容。客户端收到信息后需向服务端反馈“我已收到”,若客户端未反馈,服务端会保存会话内容并重复发送。
- 请注意,如果需要服务端保存重要报文,光设置cleanSession 为false是不够的,还需要传递的MQTT信息QoS级别大于0。
- keepAlive:心跳时间间隔(单位秒)。定期告诉服务端客户端的连接状态。
第二步:连接确认
- CONNACK数据报文的作用:向客户端发送连接确。
- returnCode:连接返回码。说明连接情况。数字0,表示成功连接。
- sessionPresent:当前会话。客户端与服务端cleanSession为false时,服务端会保存客户端未确认收到的信息。true:服务端告诉客户端有未确认的消息;false:表示客户端所有消息都已正常发送并接收。
- returnCode:连接返回码。说明连接情况。数字0,表示成功连接。
特别感谢
教程来源: 太极创客