MQTT
1、MQTT (消息隊列遙測傳輸),協議支持所有平台,把所有聯網物品和外部連接起來。用來當作傳感器和制動器的通信協議。
主要提供訂閱/發布兩種消息模式,更 簡約、輕量、易用。適合於受限環境(帶寬低、網絡延遲高、網絡通信不穩定)的消息分發。
MQTT 是基於TCP長連接,首先跟MQTT服務器簡歷TCP連接,然后發送登陸請求,要保持長連接,還要定時發心跳包跟服務器保持連接。
名字 |
值 |
流向 |
描述 |
CONNECT |
1 |
C->S |
客戶端請求與服務端建立連接 |
CONNACK |
2 |
S->C |
服務端確認連接建立 |
PUBLISH |
3 |
CóS |
發布消息 |
PUBACK |
4 |
CóS |
收到發布消息確認 |
PUBREC |
5 |
CóS |
發布消息收到 |
PUBREL |
6 |
CóS |
發布消息釋放 |
PUBCOMP |
7 |
CóS |
發布消息完成 |
SUBSCRIBE |
8 |
C->S |
訂閱請求 |
SUBACK |
9 |
S->C |
訂閱確認 |
UNSUBSCRIBE |
10 |
C->S |
取消訂閱 |
UNSUBACK |
11 |
S->C |
取消訂閱確認 |
PING |
12 |
C->S |
客戶端發送PING(連接保活)命令 |
PINGRSP |
13 |
S->C |
PING命令回復 |
DISCONNECT |
14 |
C->S |
斷開連接 |
2、數據包結構
固定頭(Fixed header):所有 mqtt數據包中,表示 包類型和數據包的分組類標識
可變頭(Variable header):部分mqtt數據包中,數據包類型決定了可變頭是否存在及其具體內容
消息體(payload):部分mqtt數據包中,表示客戶端收到的具體內容。
3、安裝mqtt服務器
http://mosquitto.org/files/source/ 下載 最新的mosquitto-*.tar.gz 文件
https://codeload.github.com/warmcat/libwebsockets/zip/master 下載 libwebsockets-master.zip
先解壓 libwebsockets 並安裝
cmake -- 用途是能通過一系列的源碼和相關的配置來生成需要的編譯器平台上的項目文件。在這里是自動產生makefile文件用的工具。
make install -- 這里用來安裝 libwebsockets
ldconfig 輔助命令, root 權限下 在/lib和/usr/lib 里添加庫文件,無需將路徑添加到 /etc/ld.so.conf 中,需要使用命令 ldconfig ,否則無法找到庫文件。
liblocal.conf 內部信息:
安裝 mosquitto
根據需要修改 config.mk , 我的沒改動。就用的默認的
make install 安裝即可
進入 /etc/mosquitto 下
mosquitto -c mosquitto.conf.example 運行 mosquitto
可以看到 mosquitto 版本 1.5 ,開放端口 1883
可以設定新的用戶名密碼: (此步驟可以省略,在測試時候不輸入用戶名密碼即可)
mosquitto_passwd -c pwfile.example testone
在 aclfile.example 中修改testone 讀寫topic 權限
新開一個 shell
mosquitto_pub -h localhost -t subtopic -u testone -P testone -m "1212121"
上傳消息 pub:本地localhost topic: subtopic 用戶名:testone 密碼 :testone 發送消息:1212121
新開一個 shell
mosquitto_sub -h localhost -t subtopic -u testone -P testone
接收消息 sub:本地localhost toptic:subtopic 用戶名:testone 密碼:testone 接收消息:1212121
附一份Java 的 mqtt測試代碼:
https://github.com/wgy1109/mqttDemo
MqttTest.java 中描述了Java向mqtt發送消息,以及從mqtt接受消息。