mosquitto 部署及 MQTT 协议解析

针对 MQTT 协议的解析 & mosquitto 软件的安装

安装

手动安装

下载软件包并安装:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#下载 最新的mosquitto-*.tar.gz 文件
http://mosquitto.org/files/source/ 
#下载 libwebsockets-master.zip
https://codeload.github.com/warmcat/libwebsockets/zip/master 
# cmake -- 用途是能通过一系列的源码和相关的配置来生成需要的编译器平台上的项目文件,在这里是自动产生 makefile 文件用的工具。
# make install -- 这里用来安装 libwebsockets
# ldconfig 辅助命令, root 权限下 在/lib和/usr/lib 里添加库文件,无需将路径添加到 /etc/ld.so.conf 中,需要使用命令 ldconfig ,否则无法找到库文件。
###################
# centos8 openssl报错:
# dnf install openssl
# dnf install openssl-devel
###### setup ######
unzip libwebsockets-master.zip
cd libwebsockets-master
cmake .
make install
vim /etc/ld.so.conf
###################
# centos8 g++报错:
# dnf install gcc-c++
###### setup ######
####### vim start
/usr/local/lib64
/usr/local/lib
####### vim end
ldconfig

软件名:mosquitto 配置文件路径:/etc/mosquitto/ 修改配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# vim /etc/mosquitto/mosquitto.conf
####### vim start
# 关闭匿名访问,默认好像就是关闭的
allow_anonymous false
# 指定用户名&密码文件路径
password_file /etc/mosquitto/pwfile
# 修改默认端口,默认1883
port 1883
# 配置topic和用户
acl_file /etc/mosquitto/aclfile
####### vim end
# 生成服务器账户
mosquitto_passwd -c /etc/mosquitto/pwfile admin
# vim /etc/mosquitto/aclfile
####### vim start
# 以topic为HelloWorld为例
user admin
topic write HelloWorld/#
user admin
topic read HelloWorld/#
####### vim end
# 启动mosquitto服务
mosquitto -c /etc/mosquitto/mosquitto.conf

订阅和发布相关命令

1
2
mosquitto_sub -h 192.168.0.100 -p port -t HelloWorld -u admin -P admin
mosquitto_pub -h 192.168.0.100 -p port -t HelloWorld -u admin -P admin -m "Hello,World"

通信格式

mqtt-format

通信示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 以下出现的数字均为十六进制
发起 MQTT 连接:
 固定报头: 10
 剩余报文长度: 4f
 协议名长度: 0004
 协议名: 4d515454
 连接标识: 04c2
 keep-alive 时间(s): 001E
 客户端ID: 000F 646665653036633464633435363235
 用户名: 0005 61646d696e
 密码: 0009 7177657a78632e2e2e
 返回: 20 02 00 00 连接成功
订阅主题:
 固定报头: 82
 消息长度: 09
 消息识别: 00 01
 主题长度: 00 04
 主题名: 6d 71 74 74
 Qos: 00
 
取消订阅主题:
 固定报头: a2
 数据长度: 08
 消息识别: 00 02
 主题长度: 00 04
 主题名: 6d 71 74 74
 
发布主题消息
0x30=0010 0000(二进制)
    0011     ------消息类型(3)发布消息
    ....0..  ------DUP标志
    .....00. ------Qos的等级 0
    .......0 ------retain :不设置
    固定报头: 30
    消息长度: 0a
    主题长度: 00 04
    主题名: 6d 71 74 74
    消息内容: 6d 71 74 74
客户端关闭:
 e0 00 
 
心跳包:
 c0 00
Built with Hugo
主题 StackJimmy 设计