mosquitto在linux下的安裝2

2021-08-08 14:31:02 字數 3000 閱讀 9862

看了有三四天的的原始碼,(當然沒怎麼好好看了),突然發現對mosquitto的原始碼有了一點點感覺,於是在第五天決定在linux環境下部署mosquitto。

使用傳統原始碼安裝步驟

:步驟1

步驟2 

:配置完畢後,輸入「make install」進行安裝(

需要root許可權

),這裡編譯失敗出現了乙個問題:

error while loading shared libraries:libmosquitto.so.1 : cannot open shared object file: no such file or directory

所以問題很清楚,沒有找到這個動態鏈結庫。遇到這種問題就有兩種情況:

1).確實沒有這個庫或者庫的版本不對  。    2)這個庫所在的路徑不在系統查詢範圍內。

筆者感覺這個庫名字很眼熟,果然在「make install」命令執行的列印資訊中發現蛛絲馬跡:

「install -s --strip-program=strip libmosquitto.so.1 /usr/local/lib/libmosquitto.so.1」

筆者在這個路徑下,找到了該動態庫,說明現在的問題應該是屬於第二種情況(而且是官方的**,也不應該會犯第一種問題),於是在網上找到了解決方案。

1)如果共享庫檔案安裝到了/lib或/usr/lib目錄下, 那麼需執行一下ldconfig命令

ldconfig命令的用途, 主要是在預設搜尋目錄(/lib和/usr/lib)以及動態庫配置檔案/etc/ld.so.conf內所列的目錄下, 搜尋出可共享的動態鏈結庫(格式如lib*.so*), 進而建立出動態裝入程式(ld.so)所需的連線和快取檔案. 快取檔案預設為/etc/ld.so.cache, 此檔案儲存已排好序的動態鏈結庫名字列表. 

2)如果共享庫檔案安裝到了/usr/local/lib(很多開源的共享庫都會安裝到該目錄下)或其它"非/lib或/usr/lib"目錄下, 那麼在執行ldconfig命令前, 還要把新共享庫目錄加入到共享庫配置檔案/etc/ld.so.conf中, 如下:(需要root許可權執行下面命令)

# cat /etc/ld.so.conf

include ld.so.conf.d/*.conf

# echo "/usr/local/lib" >> /etc/ld.so.conf

#ldconfig

(詳情參閱

這裡筆者就是使用第二種情況的辦法,成功完成編譯。

完成後會在系統命令行裡發現mosquitto、mosquitto_sub、mosquitto_pub三個工具(

網上說有四個,還有乙個mosquitto_passwd,用於管理密碼,應該是關閉ssl的原因

),分別用於啟動**、訂閱訊息和發布訊息。

測試步驟1

:開啟乙個終端:輸入「mosquitto」命令,結果如下圖,服務啟動,因為一直監聽,所以不會看到命令列。

正常情況

輸入「mosquitto」如果如下圖報錯,發現報錯是位址已被使用,可以使用 "ps -e "檢視程序和「netstat -apn | grep :1883」來檢視誰占用埠,可使用「kill -s 9 pid號」殺死該程序,然後重新輸入「mosquitto」命令即可得到上圖正確結果。

報錯步驟2

:開啟第二個終端,輸入「mosquitto_sub -t 主題名 -i 使用者名稱」, (後面的「-i 使用者名稱可省略」)

例如:mosquitto_sub -t mqtt        結果如圖,由於一直監聽,所以也不會看到命令列。

發布訊息前第二個終端截圖

步驟3:開啟第三個終端,輸入「mosquitto_pub -t 主題名 -i 使用者名稱 -m 要傳送的訊息」

(如果要傳送的訊息中有空格,需用引號括起來)

例如:mosquitto_pub -h localhost -t mqtt -m "hello world"

則第二個終端可以收到這條資訊。筆者看到其命令列有檔案傳輸,又嘗試傳乙個檔案(內容只有一句話),第二個終端會直接顯示檔案的內容(截圖中「hello world」下面的那句話就是)。嘗試乙個大檔案的傳輸,將乙個7m的書傳過去,首先是可以傳,但是第二個視窗顯示的全是亂碼,傳輸的速度也是乙個問題。

發布訊息後的第二個終端截圖

這裡之所以會想到傳檔案是因為看到mosquitto_pub的命令引數中有關於把檔案當做message傳輸的記錄,如圖:

這裡的檔案上限預設是256m。邏輯中有對檔案大小的判斷,超過256m的檔案則不傳。不知道這裡如果吧這個值修改更大,會不會產生影響,筆者沒有嘗試,因為傳7m的檔案都感覺很慢。(

這個問題在mqtt協議介紹中可以得到答案,mqtt檔案長度的表示是用1至4個位元組來表示,而其表示長度的方式又有特殊的加密方式,按照這種方式,其最大表示的長度為256m)

測試總結

三個終端,乙個用來開啟服務,乙個執行mosquitto_sub來訂閱訊息,與伺服器保持長連線,隨時接收來自伺服器推送的訊息,最後乙個終端則用來發布訊息。這個測試的結果現在是正確的,但仍存在侷限性,還有以下幾個問題需要注意:

1)了解mosquitto_sub和mosquitto_pub命令背後是如何執行的,需要修改,訂閱端的處理肯定不能僅僅是顯示內容 到標準輸出上。

2)了解mosquitto命令的邏輯,這裡包含的內容很多,估計也是最難的。

3)這裡的實驗是在本地傳輸,需要做乙個客戶端出來(客戶端可能是android端或者mcu端),看是否可以正常傳輸,還有就是能傳多大的資料,允許同時連入的客戶數有多少(據說是20000以上)。

Mosquitto 學習筆記

mosquitto的安裝,可以參見 基礎配置 mosquitto服務的配置檔案為 etc mosquitto mosquitto.conf,但一般情況下,我們不會去修改這個檔案,而是將需要配置的內容新建檔案儲存在 etc mosquitto conf.d 目錄下。在預設情況下,mosquitto服務...

mosquitto 安裝與使用

mosquitto工具安裝使用 mqtt是ibm開發的乙個即時通訊協議。mqtt是面向m2m和物聯網的連線協議,採用輕量級發布和訂閱訊息傳輸機制。mosquitto是一款實現了 mqtt v3.1 協議的開源訊息 軟體,提供輕量級的,支援發布 訂閱的的訊息推送模式,使裝置對裝置之間的短訊息通訊簡單易...

mosquitto啟動引數詳解

本文介紹mosquitto啟動時的命令列引數。命令格式 mosquitto cconfig file d daemon pport number v 引數說明 c,config file 指定配置檔案,如果不指定,則使用 mosquitto.conf 檔案中配置的引數。d,daemon 執行為後台守...