MQTT之发布订阅原理

Connect 连接

MQTT 协议基于 TCP/IP 协议。

服务端 Broker

服务端配置参考我的上一篇文章 https://blog.csdn.net/lildkdkdkjf/article/details/125087162

准备好客户端 connect 需要的认证信息:

IP = '127.0.0.1'
PORT = 1883
ACCOUNT = 'test'
PASSWD = 'Aa123456'
TOPIC = "/mqtt"

客户端 Client

ClientId

服务端使用 ClientId 识别客户端:每个客户端都有唯一的 ClientId ,服务端允许客户端提供一个空的 ClientId,这种情况服务端会自动分配唯一的 ClientId 给客户端。

Username/Password 账号密码

MQTT 可以通过用户名和密码来进行相关的认证授权。也支持无账号的方式通信,潜在的安全问题,所以很少在生产环境中使用。

发布/订阅 pub/sub

发布/订阅模式(也称为pub / sub)提供了传统客户端-服务器体系结构的替代⽅法。
客户端服务器模型中,客户端与端点直接进⾏通信
发布/ 订阅模型中,将发送消息的客户端(发布者)与接收消息的客户端(订阅者)分离,发布者和订阅者从不彼此直接联系。实际上,他们甚⾄不知道另⼀个存在,它们之间的连接由第三个组件(代理)处理。代理的⼯作是过滤所有传⼊消息,并将其正确分发给订阅者。

在这里插入图片描述

pub / sub的最重要⽅⾯是消息的发布者与收件⼈(订阅者)的分离。这种解耦具有⼏个⽅⾯:
空间解耦:发布者和订阅者不需要彼此了解(例如,⽆需交换IP地址和端⼝)。
时间解耦:发布者和订阅者不需要同时运⾏。
同步解耦:发布或接收期间,两个组件的操作都不需要中断。

Topic 主题

MQTT是通过主题对消息进行分类的,Topic格式是一个UTF-8字符串,可以通过通配符进行过滤。
/ 增加层级
+ 单层匹配
# 在主题末尾,多层匹配
$ 尽量避免美元符开头,因为一般MQTT服务器都会使用美元符 $ 开头的topic存储统计信息。

举个栗子:
girl/age-18:代表 girl 女孩中 的 18岁孩子。
+/age-18:代表 男孩和女孩中 的 所有18岁 孩子 。
girl/#:代表 girl 女孩中 的 所有年纪的孩子。

注意,MQTT允许使用通配符sub订阅主题,但不允许使用通配符pub发布消息,如果想发送给多个Topic,需要多次发布。

Keep Alive 心跳包

Keep Alive:单位秒,指客户端与服务端两次通信之间的最大时间段。客户端负责保证两次报文发送的时间段不超过Keep Alive值,否则客户端TCP协议会自动发送一个心跳包以保持连接。

如果服务端在超过 Keep Alive (具体计算公式看系统配置)后没有收到客户端的报文,服务端认为网络连接已断开,即判断客户端掉线。

猜你喜欢

转载自blog.csdn.net/lildkdkdkjf/article/details/125104725