1. 程式人生 > >基於MQTT協議進行應用開發

基於MQTT協議進行應用開發

來自:http://www.cnblogs.com/secondtononewe/p/6073089.html

官方協議有句如下的話來形容MQTT的設計思想:

“It is designed for connections with remote locations where a "small code footprint" is required or the network bandwidth is limited.”

MQTT:開源、可靠、輕巧、簡單,MQTT的傳輸格式非常精小,最小的資料包只有2個位元,且無應用訊息頭。 MQTT可以保證訊息的可 靠性,它包括三種不同的服務質量(最多隻傳一次、最少被傳一次、一次且只傳一次),如果客戶端意外掉線,可以使用“遺願”釋出一條訊息,同時支援持久訂 閱。MQTT在物聯網以及移動應用中的優勢有:
  • 可靠傳輸。MQTT可以保證訊息可靠安全的傳輸,並可以與企業應用簡易整合。
  • 訊息推送。支援訊息實時通知、豐富的推送內容、靈活的Pub-Sub以及訊息儲存和過濾。
  • 低頻寬、低耗能、低成本。佔用移動應用程式頻寬小,並且頻寬利用率高,耗電量較少。   因此MQTT被廣泛應用於物聯網。
虛擬機器搭建MQTT環境,進行MQTT初體驗 參考:http://blog.csdn.net/xukai871105/article/details/39252653 安裝: # 下載原始碼包  安裝mosquitto時候出現這樣的問題 1.mosquitto_internal.h:51:20: error: ares.h: No such file or directory 其實是因為它新加的功能的原因。開啟config.mk檔案。 吧WITH_SRV:=yes 改成WITH_SRV:=no 就可以編譯了 或者sudo apt-get install libc-ares-dev 2, 找不到libmosquitto.so.1 error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory 【解決方法】——修改libmosquitto.so位置 # 建立連結 sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
# 更新動態連結庫 sudo ldconfig 簡單測試  一個完整的MQTT示例包括一個代理器,一個釋出者和一個訂閱者。測試分為以下幾個步驟: 【1】啟動服務mosquitto。 【2】訂閱者通過mosquitto_sub訂閱指定主題的訊息。 【3】釋出者通過mosquitto_pub釋出指定主題的訊息。 【4】代理伺服器把該主題的訊息推送到訂閱者。 【測試說明】     測試環境:ubuntu 14.04 虛擬機器     在本例中,釋出者、代理和訂閱者均為localhsot,但是在實際的情況下三種並不是同一個裝置,在mosquitto中可通過-h(--host)設定主機名稱(hostname)
為了實現這個簡單的測試案例,需要在linux中開啟三個控制檯,分別代表代理伺服器、釋出者和訂閱者。 啟動代理服務   mosquitto -v     【-v】列印更多的除錯資訊 訂閱主題 mosquitto_sub -v -t SmartAudio_zhangling     【-t】指定主題,此處為SmartAudio_zhangling     【-v】列印更多的除錯資訊 [email protected]:/opt/mqtt/mosquitto-1.4.10/src# ./mosquitto -c ../mosquitto.conf 1474336624: mosquitto version 1.4.10 (build date 2016-09-19 18:55:57-0700) starting 1474336624: Config loaded from ../mosquitto.conf. 1474336624: Opening ipv4 listen socket on port 1883. 1474336624: Opening ipv6 listen socket on port 1883. 1474336624: Error: Invalid user 'mosquitto'. [email protected]:/opt/mqtt/mosquitto-1.4.10/src# 解決方法: 1.修改配置檔案:mosquitto.conf ,增加登入的使用者   2.執行 adduser mosquitto 釋出訊息 mosquitto_pub -t SmartAudio_zhangling -m 12     【-t】指定主題     【-m】指定訊息內容      【-f】 是可以傳送檔案 通過-f傳遞的檔案上限預設是256M。邏輯中有對檔案大小的判斷,超過256M的檔案則不傳。不知道這裡如果吧這個值修改更大,會不會產生影響,筆者沒有嘗試,因為傳7M的檔案都感覺很慢。(這個問題在MQTT協議介紹中可以得到答案,MQTT檔案長度的表示是用1至4個位元組來表示,而其表示長度的方式又有特殊的加密方式,按照這種方式,其最大表示的長度為256M)  如果不是在同一個裝置,可通過-h指定代理的IP。 (另外還有一個mosquitto_passwd,用於管理密碼,應該是關閉SSL的原因執行結果 當釋出者推送訊息之後,訂閱者獲得以下內容   =======================mosquitto部分,嵌入音箱端及手機微信端,可實現廣域網內手機微信對音箱的控制================================= 伺服器部分 mosquitto伺服器部分,肖同學負責搭建好。音箱端與手機端pub和sub都是通過伺服器進行訊息傳遞。IP地址為"120.76.30.18"; 音箱部分 進入網路模式下,則需要開啟一個執行緒,用來開啟mosquitto subscribe 訂閱一個主體。一個音箱實體對應一個主體。其他客戶端可通過這個主題,來與音箱端實現連結。 本專案,定義的主題名字利用音箱的實體地址的唯一性,如SmartAudio_MacAddress。 手機微信部分 而,手機客戶端如何得知音箱端這個主題,方法一,是微信客戶端有提供對應開發包,區域網裝置發現,但是這個功能依賴微信端,尚不穩定,最後並沒採用; 方法二:將主題生成二維碼,貼在音箱上。目前採用方法二。 而協議約定客戶端名字,可以是b_MacAddress。 而手機微信部分是客戶端IOS/Android同仁負責,這裡不作介紹。 下面主要介紹音箱部分移植mosquitto進行應用開發的內容: 開啟訂閱主題執行緒 pthread_create(&mosquitto_client_thread_id, NULL, mosquitto_sub_start, NULL) mosquitto_sub_start 是利用mosquitto sub的原始碼加以修改。 核心內容是, 兩個回撥函式的註冊

mosquitto_connect_callback_set(mosq, my_connect_callback);    
mosquitto_message_callback_set(mosq, my_message_callback);

其中my_connect_callback是mosquitto_loop_forever這個一直存在的迴圈函式在收到伺服器傳遞回來CONNACK資訊(見_mosquitto_handle_connack),則會被觸發,用來呼叫mosquitto_subscribe完成訂閱。

其中my_message_callback則是用於音箱端應用程式的開發,用來接收手機微信端傳遞過來的內容。與手機客戶端定義互動的協議,用於控制音箱的推歌、上下首切換、音源切換、網路模式的切換、音量大小的改變等等。

      互動的內容採用json包,因此需要進行json包的解析和封裝。

正確完成音箱端的訂閱,

注意設定好:

cfg.port = 1883;

cfg.topics[cfg.topic_count-1] = strdup(deviceName);

cfg.host = strdup(serverIp);  //伺服器地址

這裡初始化了一個屬於音箱端全域性的mosq,可用它關聯pub和sub;(pub和sub共用一個全域性mosq即可,並不需要分別申請一個mosq)

音箱端部分,需要pub訊息給手機微信端。採用mosquitto_pub_start傳送訊息。這個不同於sub是一個一直存在的執行緒,pub屬於一次性,訊息傳遞完畢即結束。

mosquitto_pub_start 中 全域性變數pub_topic ,在mosquitto_sub_start裡面有初始化。


相關推薦

基於MQTT協議進行應用開發

來自:http://www.cnblogs.com/secondtononewe/p/6073089.html 官方協議有句如下的話來形容MQTT的設計思想: “It is designed for connections with remote locations

基於雲資料庫MongoDB版進行應用開發

MongoDB是一個基於分散式檔案儲存的資料庫,在網際網路、物聯網、遊戲、金融等領域被廣泛採用。由C++語言編寫。旨在為WEB應用提供可擴充套件的高效能資料儲存解決方案。MongoDB是當前最流行的Nosql資料庫之一。 MongoDB是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫

電子書 flaskweb開發基於Python的Web應用開發實戰.pdf

商業 機器 免費 影評 而且 視頻軟件 python程序 規範 初級 作為PythonWeb開發的微框架,Flask獨樹一幟。它不會強迫開發者遵循預置的開發規範,為開發者提供了自由度和創意空間。   《圖靈程序設計叢書·Flask Web開發:基於Python的Web應用開

基於python的web應用開發-添加關註者

templates maps classes else 解決方法 必須 簡化 head html 社交web允許用戶之間相互聯系。 例如: 關註者、好友、聯系人、聯絡人或夥伴。 記錄兩個用戶之間的定向聯系,在數據庫查詢中也要使用這種聯系。 一、論數據庫關系 一對多關系

基於ONVIF協議的攝像頭開發總結

方式 遠程 object amp 利用 構建 bin ide code <什麽是ONVIF協議> 2008年5月,由安訊士(AXIS)聯合博世(BOSCH)及索尼(SONY)公司三方宣布攜手共同成立一個國際開放型網絡視頻產品標準網絡接口開發論壇,取名為O

《Flask Web開發——基於Python的Web應用開發實踐》一字一句上機實踐(下)

屬性 一個用戶 臨時 target 說明 實戰 分享圖片 ace 庫文件 目錄 前言 第8章 用戶認證 第9章 用戶角色 第10章 用戶資料 第11章 博客文章 第12章 關註者 第13章 用戶評論 第14章 應用編程接口 前言

FlaskWeb開發基於Python的Web應用開發實戰pdf

數據庫查詢 各類 啟動服務 管理 jin 軟件 請求 服務 inter 下載地址:網盤下載 內容簡介 · · · · · ·本書不僅適合初級Web開發人員學習閱讀,更是Python程序員用來學習高級Web開發技術的優秀參考書。? 學習Flask應用的基本結構,編寫示例應

基於Spring Boot構建應用開發規範

SpringBoot 項目規範 1.規範的意義和作用 編碼規範可以最大限度的提高團隊開發的合作效率 編碼規範可以盡可能的減少一個軟件的維護成本 , 並且幾乎沒有任何一個軟件,在其整個生命周期中,均由最初的開發人員來維護 編碼規範可以改善軟件的可讀性,可以讓開發人員盡快而徹底地理解新的代碼 規範性編碼

《Flask Web開發基於Python的Web應用開發實戰》pdf 免費下載

需求 png 入行 14. 導入 框架 錯誤 pla 引用 《Flask Web開發:基於Python的Web應用開發實戰》pdf 免費下載鏈接: https://u253469.ctfile.com/fs/253469-292665036 第一部分 Flask

《Flask Web開發基於Python的Web應用開發實戰》pdf 完整版免費下載

項目 工廠 技術分享 各類 視圖 第2章 靜態文件 閱讀 擁有 《Flask Web開發:基於Python的Web應用開發實戰》.pdf pdf 完整版免費下載: https://u253469.ctfile.com/fs/253469-292665036 更多電子書下

通過集群的方式解決基於MQTT協議的RabbitMQ消息收發

其中 enc msg received 127.0.0.1 結束 技術 tms gpu 在完成了基於AMQP協議的RabbitMQ消息收發後,我們要繼續實現基於MQTT協議的RabbitMQ消息收發。 由於C#的RabbitMQ.Client包中只實現了基於AMQP協議的消

基於Python的Web應用開發實戰——3 模板

要想開發出易於維護的程式,關鍵在於編寫形式簡潔且結構良好的程式碼。 當目前為止,你看到的示例都太簡單,無法說明這一點,但Flask檢視函式的兩個完全獨立的作用卻被融合在了一起,這就產生了一個問題。   檢視函式的作用很明確,即生成請求的響應。 如第2章中的示例,對簡單的請求來所,這就足夠了。

java的江湖——對基於java的web應用開發之整體認識

話說在上個世紀九十年代的中期,Internet開始商業化,他所帶來的便利性使人們趨之若鶩,人們尤其是一些大的企業都想用這個東西給自己的工作、生活以及學習帶來便利,但是這個時候計算機的軟硬體環境差異很大,經常會發現你在A環境中開發的軟體系統並不能在B環境中執行,在這樣的大背景下,java攜

基於MQTT協議的 org.eclipse.paho.client.mqttv3 原始碼學習(二)

一、主要類介紹 二、重點類程式碼分析 對於長連線,一般是直接從訊息的接收和傳送類開始讀,上面知道paho中訊息傳送和接收是在CommsSender和CommsReceiver實現的, 所以直接差看CommsSender程式碼。 [ja

基於MQTT協議的 org.eclipse.paho.client.mqttv3 原始碼學習(一)

一、MQTT協議簡敘 MQTT 有以下特點: 使用釋出/訂閱訊息模式,提供一對多的訊息釋出,解除應用程式耦合 使用TCP/IP提供網路連線 有三種釋出訊息服務質量 “至多一次 Qos level=0”,訊息釋出完全依賴底層 TCP/IP 網路。會發生訊息丟失或重複。這

(Flask Web開發:基於Python的Web應用開發實戰)------學習筆記(第2章)

第2章 程式的基本結構 本章將帶你瞭解 Flask 程式各部分的作用,編寫並執行第一個 Flask Web 程式。 2.1 初始化   所有 Flask 程式都必須建立一個程式例項,程式例項是 Flask 類的物件。   Web 伺服器使用一種名為 Web 伺服器閘

[分享]《Flask Web開發基於Python的Web應用開發實戰(第2版)》中文PDF+源代碼

全面介紹 flask 技術 ESS nfs 圖片 ges web應用開發 復制粘貼 下載:Flask Web開發第二版《Flask Web開發:基於Python的Web應用開發實戰》第二版中文PDF,324頁,帶目錄和書簽,文字能夠復制粘貼;配套源代碼;經典書籍第二版,講解

《FlaskWeb開發基於Python的Web應用開發實戰第2版》中英PDF+源代碼等4本書學習

開發實戰 leo 能夠 ffffff 第二版 http 資源 web開發 vpd 資源鏈接:https://pan.baidu.com/s/1p7CyLEodCy3e1u93jTVQLg《Flask Web開發 基於Python的Web應用開發實戰第2版》中英PDF+源代碼

Flask Web開發基於Python的Web應用開發實戰PDF

Flask Web開發:基於Python的Web應用開發實戰PDF 百度網盤 連結:https://pan.baidu.com/s/1_Ax_ubMUOwwfoNPUn2mDeQ 提取碼:s39f 複製這段內容後開啟百度網盤手機App,操作更方便哦 內容簡介  · · 

推薦《FlaskWeb開發:基於Python的Web應用開發實戰》附下載連結

本書不僅適合初級Web開發人員學習閱讀,更是Python程式設計師用來學習高階Web開發技術的優秀參考書。 • 學習Flask應用的基本結構,編寫示例應用; • 使用必備的元件,包括模板、資料庫、Web表單和電子郵件支援; • 使用包和模組構建可伸縮的大型應用; •