在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版本是如何運行的.