MQTT协议,EMQX自建服务器

实验环境搭建

运行Emqx需要Erlang,如果大家没有安装过的话,可以安装上方红圈中已经下载好的Erlang安装包。emqx无需安装,直接解压到无中文路径处即可。

直接把emqx解压到了D盘下。

emqx-5.3.2-windows-amd64文件夹内,按住Shift不松手,点击鼠标右键,弹出的对话框中点击红圈圈中的“在此处打开Powershell窗口”打开命令窗口。

先检查红圈中的路径,是我们emqx的文件夹

输入 bin/emqx start 命令,启动emqx

看到红圈中的信息,表示emqx启动成功,关闭命令窗口。

打开浏览器,地址栏中输入127.0.0.1:18083,登陆管理界面。

登陆管理界面,大家第一次登陆时默认用户名和密码是admin/public,登陆后emqx要求我们设置自己的密码,大家自行设置密码即可。

登陆管理界面后,选择左侧第2个选项下的客户端认证。

点击红圈中的创建按钮

选择Password-Based选项,也就是使用客户端用户名、Client ID 与密码进行认证,然后点击下一步。

选择内置数据库,然后点击下一步

按图中配置后,点击创建按钮

点击上图中用户管理,添加用户。我们建立两个用户。

用户1:ClientID(USER001) 用户名(USER001) 密码(USER001)Topic(USER001) 用户1用网络调试助手登陆

用户2:ClientID(USER002) 用户名(USER002) 密码(USER002)Topic(USER002) 用户2用MQTTX登陆

点击上图中的+号,开始添加用户。

先添加USER001用户。

再添加USER002用户。

MQTT协议报文总览

MQTT协议报文——剩余长度

剩余长度 = 可变报头长度 + 负载长度

可变长编码(1~4个字节)(128进制)

MQTT协议报文—— CONNECT 、 CONNACK 与 DISCONNECT报文

CONNECT:

10 25

00 04 4D 51 54 54 04 C2 00 64

00 07 55 53 45 52 30 30 31

00 07 55 53 45 52 30 30 31

00 07 55 53 45 52 30 30 31

DISCONNECT:

E0 00

MQTT协议报文—— PING 与 PINGRESP 报文

PING: C0 00

MQTT协议报文—— SUBSCRIBE 、 SUBACK 、UNSUBSCRIBE与 UNSUBACK报文

SUBSCRIBE:

82 0C

00 0A

00 07 55 53 45 52 30 30 32 02

UNSUBSCRIBE:

A2 0B

12 34

00 07 55 53 45 52 30 30 32

MQTT协议报文——服务质量等级

0:不需要签收

1:需要一次签收

2:需要一次签收 且 需要一次回访

MQTT协议报文—— PUBLISH 报文的分类

等级0的PUBLISH:发送方用到3号报文 没有接收方的事

等级1的PUBLISH:发送方用到3号报文 / 接收方用4号报文表示签收

等级2的PUBLISH:发送方先用到3号报文 / 接收方用5号报文表示签收                                                                    发送方再用6号报文开启回访 / 接收方用7号报文表示回访确认

MQTT协议报文—— 等级0的PUBLISH 报文

30 0C

00 07 55 53 45 52 30 30

31 31 32 33

MQTT协议报文—— PUBLISH 报文保留功能

第一个字节是 0x30:等级0的不带保留功能

第一个字节是 0x31:等级0的带保留功能

保留本条PUBLISH报文,为新粉丝保留,只保留最近的1条

31 0C

00 07 55 53 45 52 30 30

31 31 32 33

MQTT协议报文—— 等级1的PUBLISH 报文

第一次发送,不带保留:

32 0E

00 07 55 53 45 52 30 30

31 12 34 31 32 33

接收方第一次没有签收,发送方后续重发,不带保留:

3A 0E

00 07 55 53 45 52 30 30

31 12 34 31 32 33

 PUBACK:

40 02 00 01

MQTT协议报文—— 等级2的PUBLISH 报文 

第一次发送,不带保留:

34 0E

00 07 55 53 45 52 30 30

31 11 22 31 32 33

接收方第一次没有签收,发送方后续重发,不带保留:(如果是7号没有回访确认,不重发3号,而是重发6号报文)

3C 0E

00 07 55 53 45 52 30 30 31 11 22

31 32 33

(6)PUBREL:  62 02 11 22

(5)PUBREC: 50 02  00 01

(7)PUBCOMP :  70 02 00 01

MQTT协议报文—— 会话清理与保留

1:清理会话:每次CONNECT报文,都是崭新的人生,记忆丢失。每次登陆后需要重新订阅需要的TOPIC。收不到离线消息。 10 25 00 04 4D 51 54 54 04 C2 00 64 00 07 55 53 45 52 30 30 31 00 07 55 53 45 52 30 30 31 00 07 55 53 45 52 30 30 31

0:保留会话:每次CONNECT报文,有记忆的,不用重新订阅TOPIC。离线期间的消息(PUBLISH)我们可以收到。 10 25 00 04 4D 51 54 54 04 C0 00 64 00 07 55 53 45 52 30 30 31 00 07 55 53 45 52 30 30 31 00 07 55 53 45 52 30 30 31

必须是连续的C0,连续的保留之间才有记忆。

CONNECT使用清理会话--> SP就是0

CONNECT使用保留会话--> SP就是1  ????  不是

MQTT协议报文—— 会话清理和保留 同 ClientID的关系

有记忆的,但是,必须保证相同的ClientID

MQTT协议报文—— 遗嘱功能

报警功能,非正常断线(不发14号报文,直接断开TCP / 被踢下线)时,服务器会向,订阅了遗嘱TOPIC的客户端推送遗嘱PUBLISH报文。

WILL001(遗嘱TOPIC)

WILL001(PUBLISH报文数据)

10 37

00 04 4D 51 54 54 04 C6 00 64

00 07 55 53 45 52 30 30 31

00 07 57 49 4C 4C 30 30 31

00 07 57 49 4C 4C 30 30 31

00 07 55 53 45 52 30 30 31

00 07 55 53 45 52 30 30 31

82 0C

00 0A

00 07 57 49 4C 4C 30 30 32 02

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值