1. 参考文档
- 官方文档:
http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html - 官方文档(中文版):
http://mqtt.p2hp.com/mqtt311
2. 概述
基于TCP协议、发布/订阅协议,属于应用层协议。使用C/S架构,本质是一个消息转发协议。所有的客户端往服务器发送消息,然后服务端根据过滤规则,把消息再转发给符合条件的客户端。消息的传输是有序的、可靠的、双向的。
2.1 设备网络构成
设备主要有三种角色:代理(broker)、发布者(publisher)、订阅者(subscriber)。
- 代理:服务端,是传输的桥梁,一个网络中通常只有一个。负责处理客户端的连接、订阅、发布。
- 发布者:客户端,负责发布消息到代理,代理将数据转发给订阅者。
- 订阅者:客户端,负责接收代理的转发消息。
用一个简单的例子表达三者的关系:出版社发行报纸给订阅了报纸的居民。
- 居民向邮局订阅报纸和杂志,邮局记录居民的信息。
- 出版社发行各种各样的报纸和杂志,送到邮局。
- 邮局根据订阅的信息,将对应的读物分发给对应的居民。
在上面这个例子中,出版社是发布者,邮局是代理,居民是订阅者。发布者并不需要知道订阅者的地址,订阅者也不需要知道发布者的地址。发布者和订阅者只需要知道代理的地址,并且只和代理进行信息交互。
上述三步是一个完整的消息传递流程:订阅 --- 发布 --- 转发。
接着上面的例子,出版社想进一步收集用户的意见。
- 出版社和邮局达成协议,希望邮局能转交用户的意见。
- 用户将意见收集表交给邮局回收。
- 邮局根据收集表所属的出版社,将收集表交给对应的出版社。
在这种情况下,居民是发布者,邮局是代理,出版社是订阅者。
上述三步也是一个完整的消息传递流程:订阅 --- 发布 --- 转发。
发布者和订阅者都属于客户端,一个客户端可以同时是订阅者和发布者。
3. 协议特点
- 保持长连接,具有一定实时性
- 适应高延时,偶尔断网
- 支持高并发
- 单次数据量小
- 传输可靠
- 提供不同QoS(服务优先级)
4. 适用场景
- 适合需要实时控制的场合,尤其适合执行器
- 长连接不适合低功耗
- TCP协议栈比UDP对设备要求更高