1.资料
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 |
CONNECT |
Required |
CONNACK |
None |
PUBLISH |
Optional |
PUBACK |
None |
PUBREC |
None |
PUBREL |
None |
PUBCOMP |
None |
SUBSCRIBE |
Required |
SUBACK |
Required |
UNSUBSCRIBE |
Required |
UNSUBACK |
None |
PINGREQ |
None |
PINGRESP |
None |
DISCONNECT |
None |
3.android示例
3.1 在服务端发送消息
3.2 客户端收到推送的消息
3.3 客户端代码
http://www.cnblogs.com/sjjg/p/7443941.html