MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工做在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络情况糟糕的状况下而设计的发布/订阅型消息协议,为此,它须要一个消息中间件 。编程
从危机百科能够看出,MQTT是一种协议,不是一种消息队列。尽管,它有消息队列的设计,但更侧重是一种网络协议。 通常推荐使用2014年10月30日发布的MQTT 3.1.1版本,关于MQTT3.1.1版本优点的文章。服务器
MQTT客户端是运行MQTT客户端库并经过网络链接到MQTT中间件的任何设备(从嵌入式设备到服务器)。MQTT客户端库可由各类编程语言实现。 例如,Android,Arduino,C,C ++,C#,Go,iOS,Java,JavaScript和.NET。网络
MQTT中间件是MQTT协议的核心。负责接收全部消息,过滤消息,肯定订阅每条消息的客户端,以及将消息发送给这些订阅的客户端。还包括对持久会话的管理,以及客户端的认证和受权等功能。例如:Mosquitto就是由Eclipse基金会维护开发的MQTT中间件。由Apache基金会维护开发的ActiveMQ消息中间件支持MQTT协议。session
这里借用hivemq的几张图.tcp
MQTT协议是基于TCP/IP的。客户端和中间件创建链接的时候:编程语言
参数说明:ide
CONNACK消息包含两个部分:性能
参数说明:ui
Return Code | Return Code Response |
---|---|
0 | Connection accepted |
1 | Connection refused, unacceptable protocol version |
2 | Connection refused, identifier rejected |
3 | Connection refused, server unavailable |
4 | Connection refused, bad user name or password |
5 | Connection refused, not authorized |
后面,咱们再谈谈MQTT的订阅发布过程.net
MQTT Essentials: Part 1 – Introducing MQTT
MQTT Essentials Part 10: Keep Alive and Client Take-Over
MQTT Essentials Part 3: Client, Broker, and Connection Establishment