当前位置: 首页 > news >正文

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

http://www.dtcms.com/a/499044.html

相关文章:

  • 力扣1287. 有序数组中出现次数超过25%的元素
  • Linux网络与路由配置完全指南
  • 【高并发服务器】六、日志宏的实现
  • 什么是网络割接
  • 中山网站建设文化报价个人网站设计结构图
  • 专业简历制作网站推荐渭南网站建设网站排名优化
  • Electron学习(一):创建第一个应用并打包成功
  • EF Core FromExpression 方法
  • 工厂方法模式
  • 做装机u盘那个网站好市桥做网站
  • SAP MM采购对账功能分享
  • 网页设计与网站建设考试名词解释2019网站建设工作的作用
  • 【有源码】基于Python与Spark的火锅店数据可视化分析系统-基于机器学习的火锅店综合竞争力评估与可视化分析-基于用户画像聚类的火锅店市场细分与可视化研究
  • Linux: perf: sched latency,周期性抓取看趋势,做对比
  • 统计学重要思想
  • Android 本地存储方案深度解析:SharedPreferences、DataStore、MMKV 全面对比
  • 网站开发前后端中山做外贸网站
  • ElastiCache Redis 内存告警深度分析与运维实战指南
  • Spring5.3.10源码编译和调试(IDEA+Gradle)的过程
  • JS | 知识点总结 - 原型链
  • 【Docker】Docker镜像仓库
  • EEException: Geometry.area: Unable to perform this geometry operation.
  • 逻辑和共情
  • linux安装输入法
  • git连接远程仓库并拉去推送以及克隆命令
  • steam新品节游戏推荐!手机怎么玩steam游戏!
  • OpenHarmony Stage模型深度解剖:从Ability Kit到沙箱隔离的全链路底层原理
  • 基于 GEE 的 MODIS 昼夜地表温度数据可视化与导出全流程解决方案
  • 【Docker】记录一次使用docker部署dify网段冲突的问题
  • 缓存三剑客问题