MQTT的工作机制与http不同,服务器只是起着一个中转站的功能。每个客户端,都可以把消息通过服务器广播给所有其他客户端。Mqtt内称为订阅与发布:
订阅:客户端向服务器登记要订阅某主题,后续有以该主题发布的消息时,就会发给该客户端
发布:客户端向服务器发送一条消息,并说明要发布的主题,服务器就会将该消息广播给所有订阅了该主题的客户端
mosquitto是一款开源的mqtt服务器(mqtt协议内称为broker),由eclipse推出,简单易用。本文就是介绍他的安装步骤
1.安装
Ubuntu下不需要去官网下载源码进行编译,直接用apt命令安装即可
sudo apt install mosquitto
sudo apt install mosquitto-clients
第一条命令是安装mosquito本体,第二条是安装一个mqtt客户端软件
2.运行
下载后即可使用开始运行, 默认不需账号密码即可连接,默认使用1883端口。后面会介绍怎么修改配置。
sudo service mosquitto start #启动服务
sudo service mosquitto stop #停止服务
sudo service mosquitto restart #重启服务
3. 使用命令进行测试
我们先开启两个命令行窗口,一个发,一个收。
使用sub命令订阅主题,并进入接收状态,
mosquitto_sub –v -t "主题"
可选:-h 指定服务器ip地址
-u 指定登陆用的用户名
-P 指定登陆密码
使用pub命令发布内容,所有订阅该主题的客户端都会收到
mosquitto_pub -t "主题" -m "内容"
可选:-h 指定服务器ip地址
-u 指定登陆用的用户名
-P 指定登陆密码
测试情况如下图:
Mosquito配置
1 创建配置文件
配置是通过编写配置文件进行的。系统默认使用的配置文件是/etc/mosquitto/mosquitto.conf,
mosquitto.conf文件内申明了,所有存放在目录下的后缀名为.conf的文件,都会成为配置文件。既然官方都推荐将配置文件都放到那。
那我们新建一个my.conf文件存放到/etc/mosquitto/conf.d/路径下
sudo vim /etc/mosquitto/conf.d/my.conf
2 配置
完整的配置文件示例,存放在/usr/share/doc/mosquitto/examples/路径下,,可配置的项目很多,这里我们只配置启用几个常用的。
将于以下内容存放到上一步创建的my.conf文件中
#修改端口
port 1800
# 不允许匿名访问,需要使用账号密码才能连接服务器
allow_anonymous false
# 指定要使用的账号密码文件,需手动创建该文件
password_file /etc/mosquitto/pwfile
# 指定权限控制文件存放路径,需手动创建该文件
acl_file /etc/mosquitto/aclfile
3 添加用户
用touch命令创建文件,用于存储用户密码,这个路径是上一步指定的,你可以修改成别的
sudo touch /etc/mosquitto/pwfile
密码是加密存储的,需要使用mosquitto_passwd命令来创建账号。
以下命令的功能是创建user_pc这个用户,并将密码存储到指定的pwfile文件内,输入以下命令后会要求你输入密码。
sudo mosquitto_passwd /etc/mosquitto/pwfile user_pc
4 设置用户权限
先创建存放用户权限的文件,这个路径是写在my.conf内的,你可以修改成别的
sudo vim /etc/mosquitto/aclfile
权限文件示例如下,a/#代表以a/开头的所有主题,如a/test,a/b/c/d
#用户 user_pc
#只能发布 test/#
#只能订阅 a/#
#可以订阅与发布 b/#
user user_pc
topic write test/#
topic read a/#
topic b/#
#用户a只能发布 a/#
user a
topic write a/#
#所有用户都可以发布hhh/#
pattern write hhh/#
5 重启服务
sudo service mosquitto restart