MQTT简介
                            
                            
                            MQ 遙測傳輸 (MQTT) 是輕量級基于代理的發布-訂閱的消息傳輸協議,設計思想是開放、簡單、輕量、易于實現。這些特點使它適用于受限環境。例如,但不僅限于此:  
服務器的配置文件mosquitto.conf如下 安裝完成之后,所有配置文件會被放置于/etc/mosquitto/目錄下,其中最重要的就是Mosquitto的配置文件,即mosquitto.conf,但文件夾里并沒有mosquitto.conf,而是有一個mosquitto.conf.example,我們復制一下即可,為了服務器能夠使用,我們需要做一些配置 # ================================================================= ? # General configuration ? # ================================================================= ??? # 客戶端心跳的間隔時間 ? #retry_interval 20 ?? # 系統狀態的刷新時間 ? #sys_interval 10 ? # 系統資源的回收時間,0表示盡快處理 ? #store_clean_interval 10 ? # 服務進程的PID ? #pid_file /var/run/mosquitto.pid ? # 服務進程的系統用戶 ? #user mosquitto ? # 客戶端心跳消息的最大并發數 ? #max_inflight_messages 10 # 客戶端心跳消息緩存隊列 ? #max_queued_messages 100 ? # 用于設置客戶端長連接的過期時間,默認永不過期 ? #persistent_client_expiration ? ?? # ================================================================= ? # Default listener ? # ================================================================= ? # 服務綁定的IP地址 ? #bind_address ?? # 服務綁定的端口號 ? #port 1883 ??? # 允許的最大連接數,-1表示沒有限制 ? #max_connections -1 ?? # cafile:CA證書文件 ? # capath:CA證書目錄 ? # certfile:PEM證書文件 ? # keyfile:PEM密鑰文件 ?? ?? # 必須提供證書以保證數據安全性 ? #require_certificate false? # 若require_certificate值為true,use_identity_as_username也必須為true ? #use_identity_as_username false ? # 啟用PSK(Pre-shared-key)支持 ? #psk_hint ? ?? # SSL/TSL加密算法,可以使用“openssl ciphers”命令獲取 ? # as the output of that command. ? #ciphers ? # ================================================================= ? # Persistence ? # ================================================================= ? # 消息自動保存的間隔時間 ? #autosave_interval 1800 ? # 消息自動保存功能的開關 ? #autosave_on_changes false ? # 持久化功能的開關 ? persistence true ? # 持久化DB文件 ? #persistence_file mosquitto.db ? # 持久化DB文件目錄 ? #persistence_location /var/lib/mosquitto/ ?
# ================================================================= ? # Logging ? # ================================================================= ?? # 4種日志模式:stdout、stderr、syslog、topic ? # none 則表示不記日志,此配置可以提升些許性能 ? log_dest none ? ?選擇日志的級別(可設置多項) ? #log_type error ? #log_type warning ? #log_type notice ? #log_type information ? ?? # 是否記錄客戶端連接信息 ? #connection_messages true ? # 是否記錄日志時間 ? #log_timestamp true ? ?? # ================================================================= ? # Security ? # ================================================================= ??? # 客戶端ID的前綴限制,可用于保證安全性 ? #clientid_prefixes ?? # 允許匿名用戶 ? #allow_anonymous true ?? # 用戶/密碼文件,默認格式:username:password ? #password_file ? # PSK格式密碼文件,默認格式:identity:key ? #psk_file ? # pattern write sensor/%u/data ? # ACL權限配置,常用語法如下: ? # 用戶限制:user <username> ? # 話題限制:topic [read|write] <topic> ? # 正則限制:pattern write sensor/%u/data ? #acl_file ? ?? # ================================================================= ? # Bridges ? # ================================================================= ? # 允許服務之間使用“橋接”模式(可用于分布式部署) ? #connection <name> ? #address <host>[:<port>] ? #topic <topic> [[[out | in | both] qos-level] local-prefix remote-prefix] ?? # 設置橋接的客戶端ID ? #clientid ?? # 橋接斷開時,是否清除遠程服務器中的消息 ? #cleansession false ?? # 是否發布橋接的狀態信息 ? #notifications true ? # 設置橋接模式下,消息將會發布到的話題地址 ? # $SYS/broker/connection/<clientid>/state ? #notification_topic ? # 設置橋接的keepalive數值 ? #keepalive_interval 60 ? # 橋接模式,目前有三種:automatic、lazy、once ? #start_type automatic ? # 橋接模式automatic的超時時間 ? #restart_timeout 30 ?? # 橋接模式lazy的超時時間 ? #idle_timeout 60 ?? # 橋接客戶端的用戶名 ? #username ?? # 橋接客戶端的密碼 ? #password ?? # bridge_cafile:橋接客戶端的CA證書文件 ? # bridge_capath:橋接客戶端的CA證書目錄 ? # bridge_certfile:橋接客戶端的PEM證書文件 ? # bridge_keyfile:橋接客戶端的PEM密鑰文件 ? ?? # 自己的配置可以放到以下目錄中 ? include_dir /etc/mosquitto/conf.d ? 一般我們只修改監聽端口,CARfile
可能遇到的一些問題
 
                            
                        
                        
                        - 網絡代價昂貴,帶寬低、不可靠。
- 在嵌入設備中運行,處理器和內存資源有限。
- 使用發布/訂閱消息模式,提供一對多的消息發布,解除應用程序耦合。
- 對負載內容屏蔽的消息傳輸。
- 使用 TCP/IP 提供網絡連接。
- 小型傳輸,開銷很小(固定長度的頭部是 2 字節),協議交換最小化,以降低網絡流量。
- 使用 Last Will 和 Testament 特性通知有關各方客戶端異常中斷的機制。
- 有三種消息發布服務質量:
- “至多一次”,消息發布完全依賴底層 TCP/IP 網絡。會發生消息丟失或重復。這一級別可用于如下情況,環境傳感器數據,丟失一次讀記錄無所謂,因為不久后還會有第二次發送。
- “至少一次”,確保消息到達,但消息重復可能會發生。
- “只有一次”,確保消息到達一次。這一級別可用于如下情況,在計費系統中,消息重復或丟失會導致不正確的結果。
 
- bin: 與這個實例相關聯的執行腳本
- etc: 包含實例的配置文件
- data: 用于存儲持久消息的數據文件
- log: 日志文件
- tmp: 在代理間可以安全刪除的臨時文件
其中我們要留意的: MQTT服務器TCP連接端口:tcp://0.0.0.0:61613(官網給出的例子使用的端口是1883,我們可以修改apollo.xml或者直接使用61613) 后臺登錄接口:https://127.0.0.1:61681/或http://127.0.0.1:61680/ 可以在瀏覽器中輸入http://127.0.0.1:61680/或http://127.0.0.1:61680/查看是否安裝成功,初始賬號和密碼為admin和password,該界面展示了topic,連接數等很多信息。 Linux環境下搭建服務器 說起來linux環境的搭建,真的是苦大仇深啊,其中的苦不言自明,總結出來給大家,希望大家可以少走些彎路,下面開始吧 ?我用的版本為mosquitto-1.4.10,歷史版本大家可以上官網了解
- 下載源代碼包
- 解壓
- 進入目錄
- 編譯
- 安裝
服務器的配置文件mosquitto.conf如下 安裝完成之后,所有配置文件會被放置于/etc/mosquitto/目錄下,其中最重要的就是Mosquitto的配置文件,即mosquitto.conf,但文件夾里并沒有mosquitto.conf,而是有一個mosquitto.conf.example,我們復制一下即可,為了服務器能夠使用,我們需要做一些配置 # ================================================================= ? # General configuration ? # ================================================================= ??? # 客戶端心跳的間隔時間 ? #retry_interval 20 ?? # 系統狀態的刷新時間 ? #sys_interval 10 ? # 系統資源的回收時間,0表示盡快處理 ? #store_clean_interval 10 ? # 服務進程的PID ? #pid_file /var/run/mosquitto.pid ? # 服務進程的系統用戶 ? #user mosquitto ? # 客戶端心跳消息的最大并發數 ? #max_inflight_messages 10 # 客戶端心跳消息緩存隊列 ? #max_queued_messages 100 ? # 用于設置客戶端長連接的過期時間,默認永不過期 ? #persistent_client_expiration ? ?? # ================================================================= ? # Default listener ? # ================================================================= ? # 服務綁定的IP地址 ? #bind_address ?? # 服務綁定的端口號 ? #port 1883 ??? # 允許的最大連接數,-1表示沒有限制 ? #max_connections -1 ?? # cafile:CA證書文件 ? # capath:CA證書目錄 ? # certfile:PEM證書文件 ? # keyfile:PEM密鑰文件 ?? ?? # 必須提供證書以保證數據安全性 ? #require_certificate false? # 若require_certificate值為true,use_identity_as_username也必須為true ? #use_identity_as_username false ? # 啟用PSK(Pre-shared-key)支持 ? #psk_hint ? ?? # SSL/TSL加密算法,可以使用“openssl ciphers”命令獲取 ? # as the output of that command. ? #ciphers ? # ================================================================= ? # Persistence ? # ================================================================= ? # 消息自動保存的間隔時間 ? #autosave_interval 1800 ? # 消息自動保存功能的開關 ? #autosave_on_changes false ? # 持久化功能的開關 ? persistence true ? # 持久化DB文件 ? #persistence_file mosquitto.db ? # 持久化DB文件目錄 ? #persistence_location /var/lib/mosquitto/ ?
# ================================================================= ? # Logging ? # ================================================================= ?? # 4種日志模式:stdout、stderr、syslog、topic ? # none 則表示不記日志,此配置可以提升些許性能 ? log_dest none ? ?選擇日志的級別(可設置多項) ? #log_type error ? #log_type warning ? #log_type notice ? #log_type information ? ?? # 是否記錄客戶端連接信息 ? #connection_messages true ? # 是否記錄日志時間 ? #log_timestamp true ? ?? # ================================================================= ? # Security ? # ================================================================= ??? # 客戶端ID的前綴限制,可用于保證安全性 ? #clientid_prefixes ?? # 允許匿名用戶 ? #allow_anonymous true ?? # 用戶/密碼文件,默認格式:username:password ? #password_file ? # PSK格式密碼文件,默認格式:identity:key ? #psk_file ? # pattern write sensor/%u/data ? # ACL權限配置,常用語法如下: ? # 用戶限制:user <username> ? # 話題限制:topic [read|write] <topic> ? # 正則限制:pattern write sensor/%u/data ? #acl_file ? ?? # ================================================================= ? # Bridges ? # ================================================================= ? # 允許服務之間使用“橋接”模式(可用于分布式部署) ? #connection <name> ? #address <host>[:<port>] ? #topic <topic> [[[out | in | both] qos-level] local-prefix remote-prefix] ?? # 設置橋接的客戶端ID ? #clientid ?? # 橋接斷開時,是否清除遠程服務器中的消息 ? #cleansession false ?? # 是否發布橋接的狀態信息 ? #notifications true ? # 設置橋接模式下,消息將會發布到的話題地址 ? # $SYS/broker/connection/<clientid>/state ? #notification_topic ? # 設置橋接的keepalive數值 ? #keepalive_interval 60 ? # 橋接模式,目前有三種:automatic、lazy、once ? #start_type automatic ? # 橋接模式automatic的超時時間 ? #restart_timeout 30 ?? # 橋接模式lazy的超時時間 ? #idle_timeout 60 ?? # 橋接客戶端的用戶名 ? #username ?? # 橋接客戶端的密碼 ? #password ?? # bridge_cafile:橋接客戶端的CA證書文件 ? # bridge_capath:橋接客戶端的CA證書目錄 ? # bridge_certfile:橋接客戶端的PEM證書文件 ? # bridge_keyfile:橋接客戶端的PEM密鑰文件 ? ?? # 自己的配置可以放到以下目錄中 ? include_dir /etc/mosquitto/conf.d ? 一般我們只修改監聽端口,CARfile
可能遇到的一些問題
- 編譯找不到openssl/ssl.h
- 編譯過程找不到ares.h
- 編譯過程找不到uuid/uuid.h
- 使用過程中找不到libmosquitto.so.1
- make: g++:命令未找到 ?
- Invalid user 'mosquitto'. ?
- Address already in use
- 訂閱主題,開啟一個新的終端,輸入如下
- 發布內容,開啟一個新的終端,輸入如下
未完待續
參考:
http://blog.csdn.net/yannanxiu/article/details/52703946 http://blog.csdn.net/djun100/article/details/25752491 http://blog.csdn.net/xukai871105/article/details/39252653 http://blog.csdn.net/shagoo/article/details/7910598 http://www.tuicool.com/articles/RjyuEbj https://my.oschina.net/u/1396253/blog/175773 官網:http://mqtt.org/documentation http://www.ibm.com/developerworks/websphere/library/techarticles/0508_oconnell/0508_oconnell.html總結
 
                            
                        - 上一篇: asp.net 服务器控件的 ID,Cl
- 下一篇: 给apk签名
