MQTT协议的初浅认识之链接创建

MQTT百科

MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工做在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络情况糟糕的状况下而设计的发布/订阅型消息协议,为此,它须要一个消息中间件 。编程

从危机百科能够看出,MQTT是一种协议,不是一种消息队列。尽管,它有消息队列的设计,但更侧重是一种网络协议。 通常推荐使用2014年10月30日发布的MQTT 3.1.1版本,关于MQTT3.1.1版本优点的文章服务器

几个概念

客户端(Client)

MQTT客户端是运行MQTT客户端库并经过网络链接到MQTT中间件的任何设备(从嵌入式设备到服务器)。MQTT客户端库可由各类编程语言实现。 例如,Android,Arduino,C,C ++,C#,Go,iOS,Java,JavaScript和.NET。网络

中间件(Broker)

MQTT中间件是MQTT协议的核心。负责接收全部消息,过滤消息,肯定订阅每条消息的客户端,以及将消息发送给这些订阅的客户端。还包括对持久会话的管理,以及客户端的认证和受权等功能。例如:Mosquitto就是由Eclipse基金会维护开发的MQTT中间件。由Apache基金会维护开发的ActiveMQ消息中间件支持MQTT协议。session

MQTT 链接

这里借用hivemq的几张图.tcp

MQTT链接过程

mqtt-tcp-ip-stack

MQTT协议是基于TCP/IP的。客户端和中间件创建链接的时候:编程语言

  • 客户端先发送CONNECT消息给中间件
  • 中间件收到客户端的链接请求后返回CONNACK消息

connect-flow

CONNECT消息

connect

参数说明:ide

  • clientId:表示客户端id,能够是设备惟一id,或者是业务系统用户id
  • cleanSession:false表示使用持久会话;true表示不使用持久会话
  • username:mqtt中间件的验证用户名
  • password:mqtt中间件的验证密码
  • lassWill开头:表示客户端从中间件中意外断开时中间件应该怎么作
  • keepAlive:表示客户端与中间件之间在没有任何消息的推送的时候,多久启用一次客户端发一次PINGREQ消息,中间件收到PINGREQ消息后,必须给客户端回复PINGRESP消息。这个参数很重要。

CONNACK消息

CONNACK消息包含两个部分:性能

  • 会话是否持久标识
  • mqtt链接状态标识

connack1

参数说明:ui

  • sessionPresent::true表示是持久会话;不然,反之。
  • returnCode:见下表。
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

Mosquitto服务器日志分析总结

MQTT Essentials Part 10: Keep Alive and Client Take-Over

MQTT Essentials Part 3: Client, Broker, and Connection Establishment

相关文章
相关标签/搜索