前文说到最近正在研究mqtt应用的相关方案,接下来可能会陆续出好几篇相关教程。
昨天,我们说完了 Windows环境下【QT编译并部署QtMqtt相关环境+跑测demo】
接下来,我们陆续来讲讲,Linux环境下MQTT的搭建。
今天我们先来讲讲 ubuntu通过消息代理直接搭建mqtt服务器。
Mosquitto是一个开源的消息代理,它提供了一个服务器,用于处理发布者和订阅者之间的消息传递。它也提供了一些客户端库,可以在C,Python,Java等语言中使用,实现了MQTT (Message Queuing Telemetry Transport) 协议,以便开发人员可以在他们的应用程序中使用MQTT。
Mosquitto的主要特点有以下几点:
- 轻量级和低带宽使用:MQTT协议非常简洁,头部信息小,非常适合于网络带宽有限或者网络连接不稳定的环境。
- 发布/订阅模型:发布者可以发送消息到一个主题,订阅者可以订阅一个或多个主题来接收消息。发布者和订阅者不需要知道彼此的存在,这提供了很大的灵活性。
- QoS等级:MQTT提供了三个不同的消息传递质量等级,包括最多一次,最少一次和只有一次。
- 持久会话:如果一个客户端断开连接,Mosquitto可以保存它的订阅信息和未传送的消息,等到客户端再次连接时,再传送这些消息。
- TLS/SSL支持:Mosquitto支持TLS/SSL,可以提供安全的网络连接。
- 桥接功能:Mosquitto可以作为桥接,连接到其他MQTT服务器,这提供了很大的灵活性和扩展性。
MQTT是一个基于发布/订阅模型的协议,它需要一个中间的消息代理来接收发布者的消息,并将这些消息路由到合适的订阅者。Mosquitto就是这样一个消息代理,它可以处理这些工作,而用户只需要在应用程序中实现pub和sub。
使用类似于Mosquitto的消息代理是实现MQTT的一个好方法,但并不是唯一的方法。需要根据具体需求和资源来选择最合适的方法。
而此处,我们是针对Linux环境下搭建MQTT的方案,进行的一个分享。考虑到Mosquitto对Linux环境也是十分友好的,所以不失为一个很好的选择。
进入官网下载源码:https://mosquitto.org/files/source/
然后通过共享文件夹分享到Linux环境下使用。当然,也可以在ubuntu中直接下载。
PS:如果有不知道如何搭建Linux和Win共享文件夹的宝子,可以移步我之前写的这个教程:
【Linux和Win 共享文件夹 搭建使用方法【超简单】+ 共享后无法出现文件夹的解决方式】
在终端中执行以下命令(中间安装可能会出现要更新apt-get,根据提示执行命令即可,如出现问题请自行查阅)
# 安装mosquitto
sudo apt-get install mosquitto
# 安装客户端
sudo apt-get install mosquitto-clients
# 安装设备端
sudo apt-get install mosquitto-dev
通过终端跳转到共享文件夹下,将下载好的Mosquitto源码包进行解压。
tar -xzvf mosquitto-2.0.18.tar.gz
在 Linux 系统中,可以通过以下几种方式来获取 Mosquitto 服务器的具体信息。
PS: 请注意,一些命令可能需要管理员权限才能运行,你可能需要使用 sudo 命令。
版本信息:你可以通过运行以下命令来查看 Mosquitto 的版本信息:
mosquitto -v
配置信息:你可以查看 Mosquitto 的配置文件来获取其配置信息。默认情况下,Mosquitto 的配置文件通常位于 /etc/mosquitto/mosquitto.conf
。你可以使用 cat
或 less
命令来查看它:
cat /etc/mosquitto/mosquitto.conf
或
less /etc/mosquitto/mosquitto.conf
运行状态:你可以使用 systemctl
命令来查看 Mosquitto 的运行状态:
systemctl status mosquitto
这会显示 Mosquitto 的运行状态、启动日志等信息。
可以通过步骤4中提示的指令,查看一下当前mosquitto的状态,如图。
看到当前Mosquitto的运行状态,并且出现一系列的运行相关信息。
Active: active (running)
表示当前Mosquitto 运行状态正常
日志信息:你可以查看 Mosquitto 的日志文件来获取其运行日志信息。默认情况下,Mosquitto 的日志文件通常位于 /var/log/mosquitto/mosquitto.log
。你可以使用 cat
或 less
命令来查看它:
cat /var/log/mosquitto/mosquitto.log
或
less /var/log/mosquitto/mosquitto.log
在终端输入下面的命令,启动mosquitto
mosquitto -c /etc/mosquitto/mosquitto.conf
运行报错:
如果出现以下提示
表示你在尝试启动 Mosquitto 时遇到了一个错误,提示 “Address already in use”。
这意味着端口 1883 已经被其他进程占用了。你可以使用以下命令来查看哪个进程正在使用这个端口:
sudo lsof -i :1883
或者
sudo netstat -tuln | grep :1883
这两个命令都会列出正在监听端口 1883 的进程。你可以根据这些信息决定是否需要停止这个进程,或者更改 Mosquitto 的配置文件使其监听不同的端口。
先打开一个终端作为订阅监听端
,然后再开一个终端作为信息发送端
。
查看交互信息,测试MQTT是否能成功运行,使用mqttfx进行连接测试
mosquitto_sub -t "test1"
mosquitto_pub -t "test1" -m "hello mqttfx"
若交互如图,则表示至此,Linux下的MQTT环境已经通过mosquitto搭建成功,且正常运行。
通过Linux终端获取Linux的IP信息,如图。
ifconfig
然后,在Win下打开一个支持MQTT检测的程序,此处我使用的是通信猫
。
具体设置如图:
设置步骤:
- 点击网络
- 选择MQTT
- 设置服务端IP和访问端口,此处即为Linux端IP和mosquitto端口号
- 点击启用
- 设置订阅主题和发布主题,此处测试用的"test1"
- 输入消息,并点击发布消息
至此,Linux端已经接收到win端发布的消息,表示MQTT环境不同端交互也是正常的。
如果项目的应用场景非常简单,或者想要完全控制消息的路由,也可以自己实现一个简单的MQTT服务器。
不过,实现一个稳定、高效和安全的MQTT服务器可能需要大量的工作,并且需要深入理解MQTT协议。
最近正在研究mqtt应用的相关方案,接下来可能会陆续出好几篇相关教程。Linux环境下的搭建还不仅如此,QT如果在Linux端使用QtMqtt库,正在码文中…
我的相关文章指路:
Windows环境下【QT编译并部署QtMqtt相关环境+跑测demo】
后期更新会把链接放上来。
感兴趣的宝子,可以点个收藏,加个关注哟~