MQTT java
一、MQTT (消息隊列遙測傳輸),協議支持全部平臺,把全部聯網物品和外部鏈接起來。用來看成傳感器和制動器的通訊協議。git
主要提供訂閱/發佈兩種消息模式,更 簡約、輕量、易用。適合於受限環境(帶寬低、網絡延遲高、網絡通訊不穩定)的消息分發。github
MQTT 是基於TCP長鏈接,首先跟MQTT服務器簡歷TCP鏈接,而後發送登錄請求,要保持長鏈接,還要定時發心跳包跟服務器保持鏈接。web
名字shell |
值服務器 |
流向websocket |
描述網絡 |
CONNECTsocket |
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 |
斷開鏈接 |
二、數據包結構
固定頭(Fixed header):全部 mqtt數據包中,表示 包類型和數據包的分組類標識
可變頭(Variable header):部分mqtt數據包中,數據包類型決定了可變頭是否存在及其具體內容
消息體(payload):部分mqtt數據包中,表示客戶端收到的具體內容。
三、安裝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接受消息。