1.资料
mqtt官网 | |
服务端程序列表 | |
客户端库列表 | |
android相关 | https://github.com/mqtt/mqtt.github.io/wiki/mqtt_on_the_android_platform |
java MQTT客户端,android可用 | |
mqtt v3.1.1 协议官方文档 | http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.doc http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.pdf |
2.MQTT协议
2.1 简介
MQTT = Message Queuing Telemetry Transport
It is a publish/subscribe, extremely simple and lightweight messaging protocol, designed for constrained devices and low-bandwidth, high-latency or unreliable networks.
MQTT是一个简单、轻量、高效,适应低宽带、网络不可靠等条件的消息发布/订阅协议。详细见: http://mqtt.org/faq
2.2 MQTT
协议中有三个角色
-
发布者(Publish)
服务器/代理(Broker)
订阅者(Subscribe)
其中,消息的发布者
和订阅者
都是客户端,消息代理
是服务器,消息发布者
可以同时是订阅者
。
在服务器上准备个mqtt服务端程序,在客户端准备mqtt相应客户端程序,就可以使用mqtt协议通信了。参考 :MQTT服务端与客户端软件对比、android客户端示例表
2.3 MQTT
协议中几个重要概念
订阅(Subscription) | 订阅包含主题筛选器(Topic Filter)和最大服务质量(QoS)。订阅会与一个会话(Session)关联。 一个会话可以包含多个订阅。每一个会话中的每个订阅都有一个不同的主题筛选器。 |
会话(Session) | 每个客户端与服务器建立连接后就是一个会话,客户端和服务器之间有状态交互。会话存在于一个网络 之间,也可能在客户端和服务器之间跨越多个连续的网络连接。 |
主题名(Topic Name) | 连接到一个应用程序消息的标签,该标签与服务器的订阅相匹配。服务器会将消息发送给订阅所匹配标 签的每个客户端。 |
负载物(Payload) | 消息订阅者所具体接收的内容 |
2.4 MQTT v3.1.1数据包格式
参考官方文档:http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718018
一个mqtt数据包至多包含下面3个部分,且是按下面的顺序。
Fixed header, present in all MQTT Control Packets | 固定消息头,在所有消息中包中出现 |
Variable header, present in some MQTT Control Packets | 变化的消息头,在一些特定包中出现 |
Payload, present in some MQTT Control Pa | 消息的负载物,在一些包中出现 |
2.5 MQTT v3.1.1固定消息头格式
参考官方文档:http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718020
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
byte 1 | MQTT Control Packet type | Flags specific to each MQTT Control Packet type | ||||||
byte 2… | Remaining Length |
2.6 MQTT v3.1.1变化消息头格式
参考官方文档:http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718024
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
byte 1 | Packet Identifier MSB | |||||||
byte 2 | Packet Identifier LSB |
2.7 MQTT v3.1.1消息体(装载物)格式
参考官方文档:http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718026
Control Packet | Payload | Control Packet | Payload | Control Packet | Payload |
CONNECT | Required | PUBREL | None | UNSUBACK | None |
CONNACK | None | PUBCOMP | None | PINGREQ | None |
PUBLISH | Optional | SUBSCRIBE | Required | PINGRESP | None |
PUBACK | None | SUBACK | Required | DISCONNECT | None |
PUBREC | None | UNSUBSCRIBE | Required | | |
3.android示例
3.1 在服务端发送消息
3.2 客户端收到推送的消息