2.1 MQTT
协议实现方式
实现
MQTT
协议需要客户端和服务器端通讯完成,在通讯过程中,
MQTT
协议中有三种身份:发布者
(
Publish
)、代理(
Broker
)(服务器)、订阅者(
Subscribe
)。其中,消息的发布者和订阅者都是客户端,消
息代理是服务器,消息发布者可以同时是订阅者。
MQTT
传输的消息分为:主题(
Topic
)和负载(
payload
)两部分:
(
1
)
Topic
,可以理解为消息的类型,订阅者订阅(
Subscribe
)后,就会收到该主题的消息内容
(
payload
);
(
2
)
payload
,可以理解为消息的内容,是指订阅者具体要使用的内容。
2.2
网络传输与应用消息
MQTT
会构建底层网络传输:它将建立客户端到服务器的连接,提供两者之间的一个有序的、无损的、基于字
节流的双向传输。
当应用数据通过
MQTT
网络发送时,
MQTT
会把与之相关的服务质量(
QoS
)和主题名(
Topic
)相关连。
2.3 MQTT
客户端
一个使用
MQTT
协议的应用程序或者设备,它总是建立到服务器的网络连接。客户端可以:
(
1
)发布其他客户端可能会订阅的信息;
(
2
)订阅其它客户端发布的消息;
(
3
)退订或删除应用程序的消息;
(
4
)断开与服务器连接。
2.4 MQTT
服务器端
MQTT
服务器以称为
"
消息代理
"
(
Broker
),可以是一个应用程序或一台设备。它是位于消息发布者和订阅者
之间,它可以:
(
1
)接受来自客户的网络连接;
(
2
)接受客户发布的应用信息;
(
3
)处理来自客户端的订阅和退订请求;
(
4
)向订阅的客户转发应用程序消息。
2.5
发布
/
订阅、主题、会话
MQTT
是基于
发布
(Publish)/
订阅
(Subscribe)
模式来进行通信及数据交换的,与
HTTP
的
请求
(Request)/
应
答
(Response)
的模式有本质的不同。
订阅者
(Subscriber)
会向
消息服务器
(Broker)
订阅一个
主题
(Topic) 。成功订阅后,消息服务器会将该主题 下的消息转发给所有的订阅者。
主题
(Topic)
以
‘/’
为分隔符区分不同的层级。包含通配符
‘+’
或
‘#’
的主题又称为
主题过滤器
(Topic Filters)
; 不 含通配符的称为
主题名
(Topic Names)
例如
:
发布者
(Publisher)
只能向
‘
主题名
’
发布消息,订阅者
(Subscriber)
则可以通过订阅
‘
主题过滤器’ 来通配多个主题名称。
'+': 表示通配一个层级,例如a/+,匹配a/x, a/y
'#': 表示通配多个层级,例如a/#,匹配a/x, a/b/c/d
注: ‘+’ 通配一个层级,’#’ 通配多个层级(必须在末尾)。
会话(
Session
)
每个客户端与服务器建立连接后就是一个会话,客户端和服务器之间有状态交互。会话存在于一个网络之间, 也可能在客户端和服务器之间跨越多个连续的网络连接。
2.6 MQTT
协议中的方法
MQTT
协议中定义了一些方法(也被称为动作),来于表示对确定资源所进行操作。这个资源可以代表预先存
在的数据或动态生成数据,这取决于服务器的实现。通常来说,资源指服务器上的文件或输出。主要方法有:
(
1
)
CONNECT
:客户端连接到服务器
(
2
)
CONNACK
:连接确认
(
3
)
PUBLISH
:发布消息
(
4
)
PUBACK
:发布确认
(
5
)
PUBREC
:发布的消息已接收
(
6
)
PUBREL
:发布的消息已释放
(
7
)
PUBCOMP
:发布完成
(
8
)
SUBSCRIBE
:订阅请求
(
9
)
SUBACK
:订阅确认
(
10
)
UNSUBSCRIBE
:取消订阅
(
11
)
UNSUBACK
:取消订阅确认
(
12
)
PINGREQ
:客户端发送心跳
(
13
)
PINGRESP
:服务端心跳响应
(
14
)
DISCONNECT
:断开连接
(
15
)
AUTH
:认证