mosquitto——一個開源的mqtt代理


 MQTT(MQ Telemetry Transport),消息隊列遙測傳輸協議,輕量級的發布/訂閱協議,適用於一些條件比較苛刻的環境,進行低帶寬、不可靠或間歇性的通信。值得一提的是mqtt提供三種不同質量的消息服務:

  • “至多一次”,消息發布完全依賴底層 TCP/IP 網絡。會發生消息丟失或重復。這一級別可用於如下情況,環境傳感器數據,丟失一次讀記錄無所謂,因為不久后還會有第二次發送。
  • “至少一次”,確保消息到達,但消息重復可能會發生。
  • “只有一次”,確保消息到達一次。這一級別可用於如下情況,在計費系統中,消息重復或丟失會導致不正確的結果。

下面是比較詳細的介紹鏈接。

MQ 遙測傳輸 (MQTT) V3.1 協議規范

http://www.ibm.com/developerworks/cn/webservices/ws-mqtt/index.html

 

而mosquitto是一個開源broker,並且支持MQTTv3.1,支持客戶端的驗證。

mosquitto包括服務端和客戶端。

 

mosquitto_pub 客戶端可發布一條消息到指定主題:

用法:

mosquitto_pub [-d] [-h hostname] [-i client_id] [-I client id prefix] [-p port number] [-q message QoS] [--quiet] [-r] { -f file | -l | -m message | -n | -s} [-u username [-P password] ] [ --will-topic topic [--will-payload payload] [--will-qos qos] [--will-retain] ] -t message-topic  

選項:

-d, --debug  

開啟debug選項

-f, --file

把一個文件的內容做為消息的內容發送。經測試,支持txt文件,不支持doc等其他形式文件。

-h, --host

說明所連接到的域名,默認是localhost

-i, --id

客戶端的ID號,如果沒有指定,默認是mosquitto_pub_加上客戶端的進程id,不能和--id_prefix同時使用。

-I, --id-prefix

指定客戶端ID的前綴,與客戶端的進程ID連接組成客戶端的ID,不能喝--id同時使用。

-l, --stdin-line

從總段讀取輸入發送消息,一行為一條消息,空白行不會被發送。

-m, --message

從命令行發送一條消息,-m后面跟發送的消息內容。

-n, --null-message

發送一條空消息。

-p, --port

連接的端口號,默認是1883.

-P, --pw

指定密碼用於代理認證,使用此選項時必須有有效的用戶名。 

-q, --qos

指定消息的服務質量,可以為0,1,2,默認是0.

--quiet

如果指定該選項,則不會有任何錯誤被打印,當然,這排除了無效的用戶輸入所引起的錯誤消息。

-r, --retain

如果指定該選項,該條消息將被保留做為最后一條收到的消息。下一個訂閱消息者將能至少收到該條消息。

-s, --stdin-file

從標准輸入接收傳輸的消息內容,所有輸入做為一條消息發送。

-t, --topic

指定消息所發布到哪個主題。

-u, --username

指定用戶名用於代理認證。

--will-payload

如果指定該選項,則萬一客戶端意外和代理服務器斷開,則該消息將被保留在服務端並發送出去,該選項必須同時用--will-topic指定主題。

--will-qos

指定Will的服務質量,默認是0.必須和選項 --will-topic同時使用.

--will-retain

如果指定該選項,則萬一客戶端意外斷開,已被發送的消息將被當做retained消息。必須和選項 --will-topic同時使用.

--will-topic

指定客戶端意外斷開時,Will消息發送到的主題。

 

 

 

sub_client客戶端訂閱一個或多個主題的消息:

用法:

mosquitto_sub [-c] [-d] [-h hostname] [-i client_id] [-I client id prefix] [-k keepalive time] [-p port number] [-q message QoS] [--quiet] [-v] [ -u username [-Ppassword] ] [ --will-topic topic [--will-payload payload] [--will-qos qos] [--will-retain] ] -t message topic ...  

命令:

mosquitto_sub 訂閱到主題,接收到消息時打印

選項:

-c--disable-clean-session

禁止'clean session'選項,即如果客戶端斷開連接,這個訂閱仍然保留來接收隨后到的QoS為1和2的消息,當改客戶端重新連接之后,它將接收到已排在隊列中的消息。建議使用此選項時,客戶端id選項設為--id

If using this option, it is recommended that the client id is set manually with --id

-d--debug

開啟debug選項

-h--host

說明所連接到的域名,默認是localhost

-i--id

客戶端的ID號,如果沒有指定,默認是mosquitto_pub_加上客戶端的進程id,不能和--id_prefix同時使用。

-I--id-prefix

指定客戶端ID的前綴,與客戶端的進程ID連接組成客戶端的ID,不能喝--id同時使用。

-k--keepalive

給代理發送PING命令(目的在於告知代理該客戶端連接保持且在正常工作)的間隔時間,默認是60s

-p--port

說明客戶端連接到的端口,默認是1883

-P--pw

指定密碼用於代理認證,使用此選項時必須有有效的用戶名。 

-q--qos

指定消息的服務質量,可以為0,1,2,默認是0.

--quiet

如果指定該選項,則不會有任何錯誤被打印,當然,這排除了無效的用戶輸入所引起的錯誤消息。

-t--topic

指定訂閱的消息主題,允許同時訂閱到多個主題

-u--username

指定用戶名用於代理認證。

-v--verbose

冗長地打印收到的消息。若指定該選項,打印消息時前面會打印主題名——“主題 消息內容”,否則,只打印消息內容

--will-payload

如果指定該選項,則萬一客戶端意外和代理服務器斷開,則該消息將被保留在服務端並發送出去,該選項必須同時用--will-topic指定主題。

--will-qos

指定Will的服務質量,默認是0.必須和選項 --will-topic同時使用.

--will-retain

如果指定該選項,則萬一客戶端意外斷開,已被發送的消息將被當做retained消息。必須和選項 --will-topic同時使用.

--will-topic

指定客戶端意外斷開時,Will消息發送到的主題。

 

 

報文種類

 

1.連接請求(CONNECT)

 當一個從客戶端到服務器的TCP/IP套接字連接被建立時,必須用一個連接流來創建一個協議級別的會話。

 

2.連接請求確認(CONNECTACK)

 連接請求確認報文(CONNECTACK)是服務器發給客戶端,用以確認客戶端的連接請求

 

3.發布報文(PUBLISH)

客戶端發布報文到服務器端,用來提供給有着不同需求的訂閱者們。每個發布的報文都有一個主題,這是一個分層的命名空間,他定義了報文來源分類,方便訂閱者訂閱他們需要的主題。訂閱者們可以注冊自己的需要的報文類別。

 

 

4.發布確認報文(PUBACK)

發布確認報文(PUBACK)是對服務質量級別為1的發布報文的應答。他可以是服務器對發布報文的客戶端的報文確認,也可以是報文訂閱者對發布報文的服務器的應答。

 

5.發布確認報文(PUBREC)

PUBREC報文是對服務質量級別為2的發布報文的應答。這是服務質量級別為2的協議流的第二個報文。PUBREC是由服務器端對發布報文的客戶端的應答,或者是報文訂閱者對發布報文的服務器的應答。

 

6.發布確認報文(PUBREL)

PUBREL是報文發布者對來自服務器的PUBREC報文的確認,或者是服務器對來自報文訂閱者的PUBREC報文的確認。它是服務質量級別為2的協議流的第三個報文。

 

7.確定發布完成(PUBCOMP)

PUBCOMP報文是服務器對報文發布者的PUBREL報文的應答,或者是報文訂閱者對服務器的PUBREL報文的應答。它是服務質量級別為2的協議流的第四個也是最后一個報文。

 

8.訂閱命名的主題(SUBSCRIBE)

訂閱報文(SUBSCRIBE)允許一個客戶端在服務器上注冊一個或多個感興趣的主題名字。發布給這些主題的報文作為發布報文從服務器端交付給客戶端。訂閱報文也描述了訂閱者想要收到的發布報文的服務質量等級。

 

9. 訂閱報文確認(SUBACK)

當服務器收到客戶端發來的訂閱報文時,將發送訂閱報文的確認報文給客戶端。一個這樣的確認報文包含一列被授予的服務質量等級。被授予的服務質量等級次序和對應的訂閱報文中的主題名稱的次序相符。

 

10. 退訂命名的主題(UNSUBSCRIBE)

退訂主題的報文是從客戶端發往服務器端,用以退訂命名的主題。

 

11. 退訂確認(UNSUBACK)

退訂確認報文是從服務器發往客戶端,用以確認客戶端發來的退訂請求報文。

 

12. Ping請求(PINGREQ)

Ping請求報文是從連接的客戶端發往服務器端,用來詢問服務器端是否還存在。

 

13. Ping應答(PINGRESP)

Ping應答報文是從服務器端發往Ping請求的客戶端,對客戶端的Ping請求進行確認。

 

14. 斷開通知(DISCONNECT)

斷開通知報文是從客戶端發往服務器端用來指明將要關閉它的TCP/IP連接,他允許徹底地斷開,而非只是下線。如果客戶端已經和干凈會話標志集聯系,那么所有先前關於客戶端維護的信息將被丟棄。一個服務器在收到斷開報文之后,不能依賴客戶端關閉TCP/IP連接。

 

(未完待續...)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM