mosquitto在Linux环境下的部署

转自: http://www.360doc.com/content/14/1010/17/12928831_415836429.shtml

使用传统源码安装步骤:

步骤1:

  • http://mosquitto.org/files/source/  官网下载源码 mosquitto-1.6.3.tar.gz,放到Linux环境中。
  • 解压(tar -xzvf mosquitto-1.6.3.tar.gz)。
  • 找到主要配置文件config.mk,其中包含mosquitto的安装选项,需要注意的是,默认情况下mosquitto的安装需要OpenSSL(一个强大的安全套接字层密码库)的支持,若不需要SSL,则需要关闭config.mk里面与SSL功能有关的选项(WITH_TLS、WITH_TLS_PSK)。笔者这里直接将这两句话屏蔽掉了。

步骤2:

  • make 
  • make install(需要root权限),这里编译失败出现了一个问题:

error while loading shared libraries:libmosquitto.so.1 : cannot open shared object file: No such file or directory

所以问题很清楚,没有找到这个动态链接库。遇到这种问题就有两种情况:
1)确实没有这个库或者库的版本不对  。    2)这个库所在的路径不在系统查找范围内。

笔者感觉这个库名字很眼熟,果然在“make install”命令执行的打印信息中发现蛛丝马迹:
“install -s --strip-program=strip libmosquitto.so.1 /usr/local/lib/libmosquitto.so.1”
笔者在这个路径下,找到了该动态库,说明现在的问题应该是属于第二种情况(而且是官方的代码,也不应该会犯第一种问题),于是在网上找到了解决方案。

1) 如果共享库文件安装到了/lib或/usr/lib目录下, 那么需执行一下ldconfig命令
       ldconfig命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件。 缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表。
2) 如果共享库文件安装到了/usr/local/lib(很多开源的共享库都会安装到该目录下)或其它"非/lib或/usr/lib"目录下, 那么在执行ldconfig命令前,还要把新共享库目录加入到共享库配置文件/etc/ld.so.conf中,如下:(需要root权限执行下面命令)
# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
# echo "/usr/local/lib" >> /etc/ld.so.conf
# ldconfig

(详情参阅http://blog.chinaunix.net/uid-26212859-id-3256667.html)
这里笔者就是使用第二种情况的办法,成功完成编译。
完成后会在系统命令行里发现mosquitto、mosquitto_sub、mosquitto_pub三个工具(网上说有四个,还有一个mosquitto_passwd,用于管理密码,应该是关闭SSL的原因),分别用于启动代理、订阅消息和发布消息。
 

技术分享

测试

步骤1:开启一个终端:输入“mosquitto”命令,结果如下图,服务启动,因为一直监听,所以不会看到命令行。
                                                                   正常情况
技术分享
输入“mosquitto”如果如下图报错,发现报错是地址已被使用,可以使用 "ps -e "查看进程和“netstat -apn | grep :1883”来查看谁占用端口,可使用“kill -s 9 pid号”杀死该进程,然后重新输入“mosquitto”命令即可得到上图正确结果。
                                                                  报错
技术分享

步骤2:开启第二个终端,输入“mosquitto_sub -t 主题名 -i 用户名”,(后面的“-i 用户名可省略”)
例如:mosquitto_sub -t mqtt        结果如图,由于一直监听,所以也不会看到命令行。
                          发布消息前第二个终端截图
技术分享
步骤3:开启第三个终端,输入“mosquitto_pub -t 主题名 -i 用户名 -m 要发送的消息”
(如果要发送的消息中有空格,需用引号括起来)
例如:mosquitto_pub -h localhost -t mqtt -m "hello world"
则第二个终端可以收到这条信息。笔者看到其命令行有文件传输,又尝试传一个文件(内容只有一句话),第二个终端会直接显示文件的内容(截图中“hello World”下面的那句话就是)。尝试一个大文件的传输,将一个7M的书传过去,首先是可以传,但是第二个窗口显示的全是乱码,传输的速度也是一个问题。
技术分享
                           发布消息后的第二个终端截图
这里之所以会想到传文件是因为看到mosquitto_pub的命令参数中有关于把文件当做message传输的记录,如图:
技术分享
这里的文件上限默认是256M。逻辑中有对文件大小的判断,超过256M的文件则不传。不知道这里如果把这个值修改更大,会不会产生影响,笔者没有尝试,因为传7M的文件都感觉很慢。(这个问题在MQTT协议介绍中可以得到答案,MQTT文件长度的表示是用1至4个字节来表示,而其表示长度的方式又有特殊的加密方式,按照这种方式,其最大表示的长度为256M)

测试总结

三个终端,一个用来开启服务,一个执行mosquitto_sub来订阅消息,与服务器保持长连接,随时接收来自服务器推送的消息,最后一个终端则用来发布消息。这个测试的结果现在是正确的,但仍存在局限性,还有以下几个问题需要注意:
1)了解mosquitto_sub和mosquitto_pub命令背后是如何执行的,需要修改,订阅端的处理肯定不能仅仅是显示内容 到标准输出上。
2)了解mosquitto命令的逻辑,这里包含的内容很多,估计也是最难的。
3)这里的实验是在本地传输,需要做一个客户端出来(客户端可能是Android端或者MCU端),看是否可以正常传输,还有就是能传多大的数据,允许同时连入的客户数有多少(据说是20000以上)。

 

### 如何在 Linux 系统中安装 Mosquitto MQTT 服务器 #### 安装步骤 Mosquitto 是一种轻量级的消息代理,支持 MQTT 协议。以下是基于 Ubuntu 的安装指南: 1. **更新系统包** 首先,在执行任何安装操作之前,请确保系统的软件包列表是最新的。 ```bash sudo apt update && sudo apt upgrade -y ``` 2. **安装 Mosquitto** 使用 `apt` 命令来安装 Mosquitto 及其客户端工具。由于 Mosquitto 已经存在于 Ubuntu 默认的软件仓库中,因此可以直接运行以下命令完成安装[^1]: ```bash sudo apt install mosquitto mosquitto-clients -y ``` 3. **验证安装状态** 安装完成后,可以通过检查服务的状态确认 Mosquitto 是否正常工作: ```bash sudo systemctl status mosquitto ``` 如果服务正在运行,则说明安装成功。 4. **重启 Mosquitto 服务** 若需要应用新配置或重新加载设置,可以使用以下命令重启 Mosquitto 服务[^2]: ```bash sudo systemctl restart mosquitto ``` 5. **后台启动并启用密码保护(可选)** 若要以指定配置文件的方式启动 Mosquitto 并将其置于后台运行,可以使用如下命令[^3]: ```bash mosquitto -c /etc/mosquitto/mosquitto.conf -d ``` 此外,还可以通过编辑 `/etc/mosquitto/passwd` 文件为连接增加用户名和密码认证功能。 6. **Nginx 或其他反向代理配置(可选)** 对于更复杂的网络环境,可能需要用到 Nginx 来作为反向代理转发 MQTT 流量。具体方法涉及修改 Nginx 配置文件 `/usr/local/nginx/conf/nginx.conf`。 7. **内网穿透解决方案(可选)** 当希望通过公网访问本地部署Mosquitto 实例时,可以选择使用 cpolar 这样的内网穿透工具替代传统方式,从而简化远程访问流程[^4]。 --- #### 注意事项 - 不同版本的 Linux 发行版可能会有不同的安装过程;上述指导主要针对基于 Debian/Ubuntu 的操作系统。 - 在生产环境中建议进一步加强安全性措施,比如 SSL/TLS 加密通信以及防火墙规则设定等。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值