01.基本概念

基本概念

MQTT协议的通信模型

MQTT的通信是通过发布/订阅的方式来实现的,订阅和发布又是基于主题(Topic)的。发布方和订阅方通过这种方式来进行解耦,它们没有直接地连接,它们需要一个中间方。在MQTT里面我们称之为Broker,用来进行消息的存储和转发。一次典型的MQTT消息通信流程如下所示:

MQTT 通信模型

  • 发布方(Publisher)连接到Broker
  • 订阅方(Subscriber)连接到Broker,并订阅主题Topic1
  • 发布方(Publisher)发送给Broker一条消息,主题为Topic1
  • Broker收到了发布方的消息,发现订阅方(Subscriber)订阅了Topic1,然后将消息转发给订阅方(Subscriber
  • 订阅方从Broker接收该消息;

MQTT通过订阅与发布模型对消息的发布方和订阅方进行解耦后,发布方在发布消息时并不需要订阅方也连接到Broker,只要订阅方之前订阅过相应主题,那么它在连接到Broker之后就可以收到发布方在它离线期间发布的消息。我们可以称这种消息为离线消息。

在该通信模型中,有两组身份需要区别:

  • 一组是发布方Publisher和订阅方Subscriberpublishersubscriber是相对于Topic来说的身份,如果一个Client向某个Topic发布消息,那么这个Client就是publisher;如果一个Client订阅了某个Topic,那么它就是Subscriber

  • 另一组是发送方Sender和接收方ReceiverSenderReceiver则是相对于消息传输方向的身份。当publisherBroker发送消息时,那么此时publishersenderBrokerreceiver;当Broker转发消息给subscriber时,此时Brokersendersubscriberreceiver

MQTT客户端

一个使用MQTT协议的设备、应用程序等,它总是建立到服务器的网络连接。

  • 可以发布信息,其他客户端可以订阅该信息
  • 订阅其它客户端发布的消息
  • 退订或删除应用程序的消息
  • 断开与服务器连接

PublisherSubscriber都属于ClientPushlisher或者Subscriber只取决于该Client当前的状态——是在发布消息还是在订阅消息。当然,一个Client可以同时是PublisherSubscriberclient的范围很广,任何终端、嵌入式设备、服务器只要运行了MQTT的库或者代码,都可以称为MQTT ClientMQTT Client库很多语言都有实现,可以在这个网址中找到:MQTT Client库大全

MQTT服务器

MQTT服务器以称为Broker(消息代理,是一个应用程序或一台设备。它是位于消息发布者 和订阅者之间。

  • 接受来自客户端的网络连接
  • 接受客户端发布的应用信息
  • 处理来自客户端的订阅和退订请求
  • 向订阅的客户转发应用程序消息

主题(Topic)

连接到一个应用程序消息的标签,该标签与服务器的订阅相匹配。服务器会将消息发送给订阅所匹配标签的每个客户端。

  • 要订阅的主题。一个主题可以有多个级别,级别之间用斜杠字符分隔。例如/worldemq/emqtt/emqx是有效的主题。
  • 订阅者的Topic name支持通配符 #+# 支持一个主题内任意级别话题,+ 只匹配一个主题级别的通配符。
  • 客户端成功订阅某个主题后,代理会返回一条SUBACK消息,其中包含一个或多个returnCode参数。

MQTT还支持主题筛选器(Topic Filter,一个对主题名通配符筛选器,在订阅表达式中使用,表示订阅所匹配到的多个主题。

QoS(消息传递的服务质量水平)

服务质量,标志表明此主题范围内的消息传送到客户端所需的一致程度。

  • 0:不可靠,消息基本上仅传送一次,如果当时客户端不可用,则会丢失该消息。
  • 1:消息应传送至少1次。
  • 2:消息仅传送一次。

会话(Session)

每个客户端与服务器建立连接后就是一个会话,客户端和服务器之间有状态交互。会话存在于一个网络之间,也可能在客户端和服务器之间跨越多个连续的网络连接。

订阅(Subscription)

订阅包含主题筛选器(Topic Filter)和最大服务质量(QoS。订阅会与一个会话(Session)关联。一个会话可以包含多个订阅。每一个会话中的每个订阅都有一个不同的主题筛选器。

  • 客户端在成功建立TCP连接之后,发送CONNECT消息,在得到服务器端授权允许建立彼此连接的CONNACK消息之后,客户端会发送SUBSCRIBE消息,订阅感兴趣的Topic主题列表(至少一个主题)

  • 订阅的主题名称采用UTF-8编码,然后紧跟着对应的QoS

发布(publish)

控制报文是指从客户端向服务端或者服务端向客户端传输一个应用消息,MQTT客户端发送消息请求,发送完成后返回应用程序线程。比如安卓的推送服务,还有一些即时通信软件如微信等也是采用的推送技术。

下一页