MQTT协议通信模型
Client/Server架构
完整的MQTT协议包括两部分,MQTT Client和MQTT Server,其中MQTT Server 也就是Broker用于接收来自客户端的消息并转发至目标客户端。
1.MQTT Client
只要设备基于MQTT协议连接了MQTT Broker ,就认为这个设备是MQTT Client, MQTT Client 可以单独作为发布者和订阅者,也可以同时是发布者和订阅者。
2.MQTT Broker
MQTT Broker 是MQTT协议的核心,主要作用是接收发布者的消息,然后转发给对应的订阅者。Broker可以对Clinet接入进行授权,并对Client进行权限控制。
发布/订阅模式
MQTT是通过发布/订阅模式实现,由于发布方和订阅方没有直接联系,所以需要一个中间方对消息进行发布和存储,我们称这个中间方为Broker,Broker 简单来说就是基于mqtt协议的server实现(github 上有很多开源实现),连接到Broker的发布方和订阅方作为Client;
信息的传输是通过主题(topic)管理的。发布者有需要分发的数据时,其向连接的消息代理发送携带有数据的控制消息。代理会向订阅此主题的客户端分发此数据。发布者不需要知道订阅者的数据和具体位置;同样,订阅者不需要配置发布者的相关信息。
如果消息代理接受到某个主题上的消息,且这个主题没有任何订阅,那么代理就会丢弃之,除非发布者将其标记为保留消息(retained message)。
发布方和订阅方都建立了到Broker的TCP连接;
订阅方告知Broker它要订阅的Topic;
发布方将消息发送到Broker,并指定消息主题(Topic);
Broker接收到消息后,检测哪些订阅方订阅了对应的Topic,然后将消息发送到订阅方;
订阅方从Broker获取消息;
如果某个订阅方处于离线状态,Broker可以先保存对应的消息,当订阅方下次连接到Broker的时候,再将之前的消息发送给订阅方;
发布/订阅模式解耦了发布消息的客户(发布者)与订阅消息的客户(订阅者)之间的关系,这意味着发布者和订阅者之间并不需要直接建立联系。
这个模式有以下好处:
· 发布者与订阅者只需要知道同一个消息代理即可;
· 发布者和订阅者不需要直接交互;
· 发布者和订阅者不需要同时在线。
由于采用了发布/订阅实现,MQTT可以双向通信。也就是说MQTT支持服务端反向控制设备,设备可以订阅某个主题,然后发布者对该主题发布消息,设备收到消息后即可进行一系列操作。