在ubuntu16.04/rk3399上搭建mqtt服务器并不难,主要就是用到了mosquitto这款消息代理服务软件.其采用发布/订阅模式传输机制,轻量、简单、开放并易于实现,被广泛应用于物联网之中.
1.环境搭建
1.1依赖环境
sudo apt install gcc-c++
sudo apt install cmake
sudo apt install openssl-dev
1.2 安装c-areas(支持异步DNS查找的库)
wget http://c-ares.haxx.se/download/c-ares-1.10.0.tar.gz
tar xvf c-ares-1.10.0.tar.gz
cd c-ares-1.10.0
./configure
make
sudo make install
1.3 安装lib-uuid
sudo apt install uuid-dev
1.4 安装libwebsockets
wget https://github.com/warmcat/libwebsockets/archive/v1.3-chrome37-firefox30.tar.gz
tar zxvf v1.3-chrome37-firefox30.tar.gz
cd libwebsockets-1.3-chrome37-firefox30
mkdir build
cd build
cmake .. -DLIB_SUFFIX=64
make install
1.5 下载mosquitto与安装
mkdir software
cd software
wget http://mosquitto.org/files/source/mosquitto-1.4.10.tar.gz
tar -xzvf mosquitto-1.4.10.tar.gz
cd mosquitto-1.4.10
make -j4
sudo make install
2.启动测试
创建用户:
sudo groupadd mosquitto
sudo useradd -g mosquitto mosquitto
程序配置:
mv /etc/mosquitto/mosquitto.conf.example /etc/mosquitto/mosquitto.conf
启动程序:
mosquitto -c /etc/mosquitto/mosquitto.conf -d
最后我们再打开一个服务器窗口,在一个(订阅)窗口输入:
mosquitto_sub -t hello
另一个(发布)窗口输入:
mosquitto_pub -t hello -h localhost -m "hello world!"
结果如下:
3.python同样程序测试
3.1 sub.py代码
import paho.mqtt.client as mqtt # 导入mqtt客户端库
def on_connect(client, userdata, flags, rc): # 连接成功回调函数
print("Connected with result code "+str(rc))
def on_message(client, userdata, msg):# 消息推送回调函数
print(msg.topic+" "+str(msg.payload))# 打印主题和消息
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("localhost", 1883, 60)
client.subscribe('emqtt',qos=0)## 订阅emqtt主题
client.loop_forever()# 循环等待消息
3.2 pub.py代码
import paho.mqtt.client as mqtt # 导入mqtt客户端库
def on_connect(client, userdata, flags, rc):# 连接成功回调函数
print("Connected with result code "+str(rc))
def on_message(client, userdata, msg):# 消息推送回调函数
print(msg.topic+" "+str(msg.payload))# 打印主题和消息
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("localhost", 1883, 60)
client.publish('emqtt',payload='Hello,EMQ!',qos=0)
client.loop_start()
3.3 运行结果
接下来看看mqtt c版本是如何运行的.