MQTT_基础向

MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。

MQTT服务端

  1. 服务端对客户端发来的信息进行必要的保存,目的是提升MQTT信息传输的稳定性。
  2. 服务端可以对客户端发来的信息进行分发,分发给对某一个信息有需要的客户端。

MQTT客户端

  1. 客户端可以向服务端发布信息,也可以从服务端收取信息。

MQTT主题

  1. 客户端想要从服务端收取信息,则首先要向服务端订阅信息。客户端订阅的就是一个一个主题。
  2. MQTT服务端在管理MQTT信息通讯时,就是使用“主题”来控制的。

MQTT发布订阅 特性

MQTT通讯的核心枢纽是MQTT服务端。有了服务端对MQTT信息的接收、存储、处理和订阅信息时,可以相互独立,且在空间上可以分离,时间上可以异步。

  1. 相互可独立:MQTT客户端是一个个独立的个体。它们无需了解彼此的存在,依然可以实现信息的交流。个体在发布信息或者订阅信息的同时无需在意其余个体的存在。
  2. 空间可分离:MQTT客户端的通讯必要条件是链接到了同一个MQTT通讯网络。不需要客户端在同一个地方。
  3. 时间可异步:MQTT客户端在发送和接收信息时无需同步。这一特点对物联网设备尤为重要。有时物联网设备会发生意外离线的情况,此时M QTT服务端可以将主题的新信息进行保存,待其成再次上线后,服务端再将物联网设备订阅的信息推送给设备。

MQTT客户端连接MQTT服务端

  1. 第一步:MQTT客户端将会向服务端发送连接请求。该请求实际上是一个包含有连接请求信息的数据包,这个数据包的官方名称是CONNECT。
  2. 第二步:MQTT服务端在接收到客户端连接请求后,会向客户端发送连接确认。同样的,该确认也是一个数据包。这个数据包的官方名称是CONNACK。

CONNECT 报文内容

客户端向服务端发送CONNECT报文,如果此CONNECT报文的格式或者内容不符合MQTT规范,则服务器会拒绝客户端的连接请求。

  1. clientId(客户端ID):ClientId是 MQTT客户端的标识,MQTT服务端通过此标识来识别客户端,因此clientId必须是独立的,不能存在重复。

  2. cleanSession(清除会话)

    • MQTT客户端与服务端的连接可能不是非常的稳定,在不稳定的网络环境中,要想保证所有信息传输都能做到准确无误,这是非常困难的。因此我们就要根据客户端对系统运行的重要性来区别对待。
    • 有些MQTT客户端对整个系统运行起着关键作用,这些客户一段一定要准确无误的接收懂到服务端发来的报文。但有些MQTT客户端对整个系统的运行不是很重要。所以有些客户端必须准确无误的接收到报文,有些则不需要。
    • 为了保证重要的MQTT报文可以被客户端准确无误的收到。在服务端向客户端发送报文后,客户端需要向服务端返回一个确认报文。如果服务端没有收到客户端返回的确认报文,那么服务端就会认为刚刚发送给客户端的报文没有被准确无误的送达。在这种情况下,服务端会执行以下两个操作:
      1. 将尚未被客户端确认的报文保存起来。
      2. 再次尝试向客户端发送报文,并且再次等待客户端发来确认信息。
    • cleanSession采用布尔值(true/false)
      1. 当cleanSession被设置为true。那么代表这个客户端并不重要。服务端不需要客户端确认收到报文,也不会保存任何报文。
      2. 当cleanSession被设置为false。那么代表这个客户端很重要。此时服务端就知道了在后续的通讯中,客户端可能回要求我保存没有收到的报文。

    需要注意的是,如果需要服务端保存重要的报文,仅仅设置cleanSession为false是不够的,还需要传递MQTT信息QoS级别大于0 。

  3. keepAlive(心跳时间间隔):用于服务端实时了解客户端是否与其保持连接的情况。后面的数值表示客户端需要每隔多少秒向服务端发送一个确认连接的报文。

CONNACK - 确认连接请求报文内容

  1. sessionPresent(当前会话):当可会端发送的CONNECT报文中的cleanSession设置为false时,客户端是要求服务端保存报文的。在这种情况下,如果服务端的确保存了没有收到客户端接收确认的报文信息,那么sessionPresent为true,否则为false。
  2. returnCode(连接返回码):当服务端收到了客户端的连接请求后,会向客户端发送returnCode,用以说明连接情况。
返回码返回码描述
0成功连接。
1连接被服务端拒绝,原因是不支持客户端的MQT协议版本。
2连接被服务端拒绝,原因是不支持客户端标识符的编码,可能造成此原因的是客户端标识符编码是UTF-8,但是服务端不允许使用此编码。
3连接被服务端拒绝,原因是服务端不可用。即网络连接已经建立,但是MQTT服务不可用。
4连接被服务端拒绝,原因是用户名或密码无效。

5
连接被服务端拒绝,原因是客户端未被授权连接到此服务端。

MQTT客户端连接MQTT服务端 订阅发送

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

排骨炖粉条

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值