普及
mqtt是ibm开源出来的万物互联的协议
如果要使用,还需再封装与一层才行,类似于tcp/udp
开源的选择
服务端选择 mosquitto
客户端选择 paho
目前支持
服务端安装
https://mosquitto.org/files/source/
下载最新的包
- 依赖的库:libssl-dev,libc-ares-dev,uuid-dev,g++
yum install -y libssl-dev libc-ares-dev uuid-dev g++ gcc-c++ cmake
可选
yum install -y lib-uuid 支持为每个客户端生成uuid
yum install libwebsockets 支持websocket
-
解压安装
make && make install
ps :安装目录在/etc/mosquitto
- 建言用户
sudo groupadd mosquitto
sudo useradd -g mosquitto mosquitto
ps:如果不建,会报: Error: Invalid user 'mosquitto'.
由于操作系统版本及架构原因,很容易出现安装之后的链接库无法被找到,如启动mosquitto客户端可能出现找不到
libmosquitto.so.1文件,因此需要添加链接库路径
//添加路径
vim /etc/ld.so.conf.d/liblocal.conf
/usr/local/lib64
/usr/local/lib
//刷新
ldconfig
- 启动
1. mosquitto -c /etc/mosquitto/mosquitto.conf
2. nohup mosquitto -c mosquitto.conf >> mosquitto.log &
5.测试验证
不需要用户密码验证
./mosquitto_sub -t hello
mosquitto_pub -t hello -h localhost -m "hi"
需要用户名密码验证
mosquitto_sub -t hello -h 127.0.0.1 -u hugo -P xxx
mosquitto_pub -t hello -h localhost -m "hi9" -u hugo -P xxx
安全性配置
用户名和密码验证
mosquitto中可以添加多个用户,只有使用用户名和密码登陆服务器才允许用户进行订阅与发布操作。可以说用户机制是mosquitto重要的安全机制,增强服务器的安全性。
用户与权限配置需要修改3处地方:
1、mosquitto中最最最重要的配置文件mosquitto.conf(改两个地方)
2、pwfile.example (保存用户名与密码)
3、aclfile.example (保存权限配置)
新增用户:
1: 打开mosquitto.conf文件,找到allow_anonymous节点,这个节点作用是,是否开启匿名用户登录,默认是true。打开此项配置(将前面的 # 号去掉)之后将其值改为false
修改前:#allow_anonymous
修改后:allow_anonymous false
2: 找到password_file节点,这个节点是告诉服务器你要配置的用户将存放在哪里。打开此配置并指定pwfile.example文件路劲(注意是绝对路劲)
修改前:#password_file
修改后:password_file /etc/mosquitto/pwfile.example (这里的地址根据自己文件实际位置填写)
3: 创建用户名和密码、打开命令窗口 键入如下命令:
mosquitto_passwd -c /etc/mosquitto/pwfile hugo
提示连续两次输入密码、创建成功。命令解释: -c 创建一个用户、/etc/mosquitto/pwfile.example 是将用户创建到 pwfile.example 文件中、admin 是用户名。
注意,mosquitto_passwd -c命令每次都只会生成只包含一个用户的文件,如果你想在passwd.conf中存放多个用户, 可以使用mosquitto_passwd -b 命令
mosquitto_passwd -b [最终生成的password_file文件] [用户名] [密码]*
mosquitto_passwd -b命令必须在控制台输入明文的密码,且每次只是在passwd.conf中新增一个用户,不会覆盖之前已生成的用户*
同时也可以使用mosquitto_passwd -D命令删除一个用户*
mosquitto_passwd的具体应用可以参考 http://mosquitto.org/man/mosquitto_passwd-1.html*
此时所有客户端连接 Mosquitto 服务都需要输入用户名密码、
用户与topic权限配置
Mosquitto 权限是根据 topic 控制的、类似与目录管理。您可以设定每个用户订阅/发布权限、也可以设定每个用户可访问的topic范围、从而达到权限控制的目的
vi aclfile
user hugo
topic readwrite hello
遇到的问题
- libmosquitto.so.1: cannot open shared object file: No such file or directory
原因是没有绑定动态库
cp /usr/local/lib/libmosquitto.so.1 /usr/lib
或
sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
ldconfig
客户端实战
客户端测试
发布: mosquitto_pub -t hello -h localhost -m "hello" -u hugo -P xxx
订阅: ./mosquitto_sub -t hello -u hugo -P xxx
这里以python为例
https://github.com/eclipse/paho.mqtt.python