国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【MQTT】MQTT簡介+安裝+使用 python MQTT客戶端

這篇具有很好參考價值的文章主要介紹了【MQTT】MQTT簡介+安裝+使用 python MQTT客戶端。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

前言

MQTT 協(xié)議簡介

為何選擇 MQTT

MQTT 通訊運作方式

MQTT 協(xié)議幀格式

MQTT服務(wù)器搭建和使用?

公共MQTT 測試服務(wù)器

MQTT服務(wù)器搭建

各種MQTT代理服務(wù)程序比較

Mosquitto安裝

MQTT使用方法

測試MQTT服務(wù)器

程序中使用MQTT


前言

本文隨時更新,轉(zhuǎn)載請注明出處,源地址:http://t.csdn.cn/kCC0B

文檔下載:https://download.csdn.net/download/bandaoyu/86541528

MQTT 協(xié)議簡介

MQTT(Message Queuing Telemetry Transport),是一個物聯(lián)網(wǎng)傳輸協(xié)議,它被設(shè)計用于輕量級的發(fā)布/訂閱式消息傳輸,旨在為低帶寬和不穩(wěn)定的網(wǎng)絡(luò)環(huán)境中的物聯(lián)網(wǎng)設(shè)備提供可靠的網(wǎng)絡(luò)服務(wù)。

MQTT是專門針對物聯(lián)網(wǎng)開發(fā)的輕量級傳輸協(xié)議。MQTT協(xié)議針對低帶寬網(wǎng)絡(luò),低計算能力的設(shè)備,做了特殊的優(yōu)化,使得其能適應(yīng)各種物聯(lián)網(wǎng)應(yīng)用場景。

為何選擇 MQTT

低協(xié)議開銷MQTT 的獨特之處在于,它的每消息標(biāo)題可以短至 2 個字節(jié)。MQ 和 HTTP 都擁有高得多的每消息開銷。對于 HTTP,為每個新請求消息重新建立 HTTP 連接會導(dǎo)致重大的開銷。MQ 和 MQTT 所使用的永久連接顯著減少了這一開銷。

? ?對不穩(wěn)定網(wǎng)絡(luò)的容忍MQTT 和 MQ 能夠從斷開等故障中恢復(fù),而且沒有進一步的代碼需求。但是,HTTP 無法原生地實現(xiàn)此目的,需要客戶端重試編碼,這可能增加冪等性問題。

? ?低功耗MQTT 是專門針對低功耗目標(biāo)而設(shè)計的。HTTP 的設(shè)計沒有考慮此因素,因此增加了功耗。

? ?數(shù)百萬個連接的客戶端在 HTTP 堆棧上,維護數(shù)百萬個并發(fā)連接,需要做許多的工作來提供支持。盡管可以實現(xiàn)此支持,但大多數(shù)商業(yè)產(chǎn)品都為處理這一數(shù)量級的永久連接而進行了優(yōu)化。IBM 提供了 IBM MessageSight,這是一個單機架裝載服務(wù)器,經(jīng)過測試能處理多達(dá) 100 萬個通過 MQTT 并發(fā)連接的設(shè)備。相反,MQ 不是為大量并發(fā)客戶端而設(shè)計的。

? ?推送通知您需要能夠及時地將通知傳遞給客戶。為此,必須采用某種定期輪詢或推送方法;從電池、系統(tǒng)負(fù)載和帶寬角度講,推送是最佳解決方案。

我們的企業(yè)可能需要在沒有第三方中介的情況下發(fā)送敏感的信息。這降低了特定于操作系統(tǒng)的解決方案(比如 Apple iOS、Google Play 通知)作為主要傳輸機制的價值。

HTTP 只允許使用一種稱為COMET 的方法,使用持久的 HTTP 請求來執(zhí)行推送。從客戶端和服務(wù)器的角度講,此方法都很昂貴。MQ 和 MQTT 都支持推送,這是它們的一個基本特性。

? ?客戶端平臺差異HTTP 和 MQTT 客戶端都已在大量平臺上實現(xiàn)。MQTT 的簡單性有助于以極少的精力在額外的客戶端上實現(xiàn) MQTT。

? ?防火墻容錯一些企業(yè)防火墻將出站連接限制到一些已定義的端口。這些端口通常被限制為 HTTP(80 端口)、HTTPS(443 端口)等。HTTP 顯然可以在這些情況下運行。MQTT 可封裝在一個 WebSockets 連接中,顯示為一個 HTTP 升級請求,從而允許在這些情況下運行。MQ 不允許采用這種模式。

事實上,MQTT的應(yīng)用非常之廣泛,幾乎現(xiàn)在隨便找一家大型的硬件、互聯(lián)網(wǎng)企業(yè),都可以找到MQTT的身影,例如Facebook、BP、alibaba、baidu等等

【MQTT】MQTT簡介+安裝+使用
                    
            
python MQTT客戶端

MQTT 通訊運作方式

使用發(fā)布/訂閱消息模式,提供一對多的消息發(fā)布,解除應(yīng)用程序耦合;

1.在MQTT通訊過程中,有三種身份,分別是發(fā)布者(publisher)、代理(broker)、和訂閱者(subscriber)。

2.MQTT傳輸?shù)南⒎譃椋褐黝}(topic)和負(fù)載(payload)兩部分:

客戶端向代理發(fā)布topic的消息到代理(MQTT服務(wù)程序),代理將該消息推送到所有訂閱該topic的客戶端。

(發(fā)布消息的客戶端就是發(fā)布者,訂閱topic消息的客戶端就是訂閱者)

【MQTT】MQTT簡介+安裝+使用
                    
            
python MQTT客戶端

MQTT 協(xié)議幀格式

在MQTT協(xié)議中,一個MQTT數(shù)據(jù)包由:固定頭(Fixed header)、可變頭(Variable header)、消息體(payload)三部分構(gòu)成。

協(xié)議幀 = 固定頭部+可變頭部+消息體

      1. 固定頭部

固定頭和可變頭一般調(diào)用接口函數(shù)自動完成拼裝,并不需要我們手動寫,只做了解。

固定頭部(2Byte)

Byte1

Byte2

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

Bit0~ Bit7

Message type

UDP flag

Qos level

RETAIN

Remaining Length

【MQTT】MQTT簡介+安裝+使用
                    
            
python MQTT客戶端

Message type(報文類型)有如下種類:

CONNECT//請求連接

CONNACK//請求應(yīng)答

PUBLISH//發(fā)布消息

PUBACK//發(fā)布應(yīng)答

PUBREC//發(fā)布已接收,保證傳遞1

PUBREL//發(fā)布釋放,保證傳遞2

PUBCOMP//發(fā)布完成,保證傳遞3

SUBSCRIBE//訂閱請求

SUBACK//訂閱應(yīng)答

UNSUBSCRIBE//取消訂閱

UNSUBACK//取消訂閱應(yīng)答

PINGREQ//ping請求

PINGRESP//ping響應(yīng)

DISCONNECT//斷開連接

      1. 可變頭部

固定頭和可變頭一般調(diào)用接口函數(shù)自動完成拼裝,并不需要我們手動寫,只做了解。

可變頭的內(nèi)容因數(shù)據(jù)包類型而不同,較常的應(yīng)用是作為包的標(biāo)識,很多類型數(shù)據(jù)包中都包括一個2字節(jié)的數(shù)據(jù)包標(biāo)識字段。

【MQTT】MQTT簡介+安裝+使用
                    
            
python MQTT客戶端

【MQTT】MQTT簡介+安裝+使用
                    
            
python MQTT客戶端

      1. 消息體

包含CONNECT、SUBSCRIBE、SUBACK、UNSUBSCRIBE四種類型的消息。

【MQTT】MQTT簡介+安裝+使用
                    
            
python MQTT客戶端
    1. MQTT協(xié)議規(guī)定的方法

(重要,無論在那個框架里這是通用的)

(1)Connect????與服務(wù)器建立連接。
(2)Disconnect????與服務(wù)器斷開TCP/IP會話。
(3)Subscribe????訂閱。
(4)UnSubscribe????取消訂閱。
(5)Publish????發(fā)送消息請求,發(fā)送完成后返回應(yīng)用程序線程。

    1. MQTT支持三種消息發(fā)布服務(wù)質(zhì)量(QoS)

對消息中間件,估計大家不得不關(guān)心的就是消息的可靠性,也就是消息的發(fā)布服務(wù)質(zhì)量,可喜的是,MQTT支持三種消息發(fā)布服務(wù)質(zhì)量(QoS):

“至多一次”(QoS==0),消息發(fā)布完全依賴底層 TCP/IP 網(wǎng)絡(luò)。會發(fā)生消息丟失或重復(fù)。這一級別可用于如下情況,環(huán)境傳感器數(shù)據(jù),丟失一次讀記錄無所謂,因為不久后還會有第二次發(fā)送。

“至少一次”(QoS==1),確保消息到達(dá),但消息重復(fù)可能會發(fā)生。

“只有一次”(QoS==2),確保消息到達(dá)一次。這一級別可用于如下情況,在計費系統(tǒng)中,消息重復(fù)或丟失會導(dǎo)致不正確的結(jié)果。小型傳輸,開銷很小(固定長度的頭部是 2 字節(jié)),協(xié)議交換最小化,以降低網(wǎng)絡(luò)流量。

通過設(shè)置協(xié)議幀中的“可變頭部”中的Qos位指定

【MQTT】MQTT簡介+安裝+使用
                    
            
python MQTT客戶端

MQTT服務(wù)器搭建和使用?

公共MQTT 測試服務(wù)器

MQTT是成熟的物聯(lián)網(wǎng)協(xié)議,網(wǎng)上已經(jīng)公開很多公用的MQTT代理/服務(wù)器 供開發(fā)人員測試,其中常用的一個就是:

地址:mq.tongxinmao.com

端口:18831

用MQTT客戶端連上以上服務(wù)器,就可以發(fā)布和訂閱MQTT消息。

MQTT服務(wù)器搭建

各種MQTT代理服務(wù)程序比較

備注:

截至2018-12-18QoS 0:服務(wù)質(zhì)量 0,最多傳輸一次。QoS 1:服務(wù)質(zhì)量1,至少傳輸一次。QoS 2:服務(wù)質(zhì)量2,僅僅傳輸一次。auth:驗證,身份驗證授權(quán)。bridge:橋接,服務(wù)器代理之間連接$SYS:主題過濾器通配符,訂閱后能夠接收到所有以此通配符開頭的主題的消息。dynamic topics:動態(tài)主題cluster:集群

Server

QoS 0

QoS 1

QoS 2

auth

bridge

$SYS

SSL

dynamic topics

cluster

websockets

plugin system

2lemetry

?

?

?

?

?

§

?

?

?

?

?

Apache ActiveMQ

?

?

?

?

?

?

?

?

?

?

?

Apache ActiveMQ Artemis

?

?

?

?

?

?

?

?

?

?

?

Bevywise IoT Platform

?

?

?

?

rm

?

?

?

?

?

rm

emitter

?

§

?

?

?

?

?

?

?

?

?

emqttd

?

?

?

?

?

?

?

?

?

?

?

flespi

?

?

?

?

?

?

?

?

?

?

?

GnatMQ

?

?

?

?

?

?

?

?

?

?

?

HBMQTT

?

?

?

?

?

?

?

?

?

?

?

HiveMQ

?

?

?

?

?

?

?

?

?

?

?

IBM MessageSight

?

?

?

?

?

?

?

?

§

?

?

JoramMQ

?

?

?

?

?

?

?

?

?

?

?

Mongoose

?

?

?

?

?

?

?

?

?

?

?

moquette

?

?

?

?

?

?

?

?

rm

?

?

mosca

?

?

?

?

?

?

?

?

?

?

?

mosquitto

?

?

?

?

?

?

?

?

§

?

?

MQTT.js

?

?

?

§

?

?

?

?

?

?

?

MqttWk

?

?

?

?

?

?

?

?

?

?

?

RabbitMQ

?

?

?

?

?

?

?

?

?

?

?

RSMB

?

?

?

?

?

?

?

?

?

?

?

Software AG Universal Messaging

?

?

?

?

?

?

?

?

?

rm

?

Solace

?

?

?

?

§

?

?

?

?

?

?

SwiftMQ

?

?

?

?

?

?

?

?

?

?

?

Trafero Tstack

?

?

?

?

?

?

?

?

?

?

?

VerneMQ

?

?

?

?

?

?

?

?

?

?

?

WebSphere MQ

?

?

?

?

?

?

?

?

?

?

?

說明:?表示支持,?表示不支持,?表示未知,§表示支持但有限制,rm表示(roadmap)路線圖規(guī)劃中也就是計劃支持。

(本次選擇相對簡單的Mosquitto舉例子)

Mosquitto安裝

Mosquitto是一個實現(xiàn)了MQTT3.1協(xié)議的代理服務(wù)器,由MQTT協(xié)議創(chuàng)始人之一的Andy Stanford-Clark開發(fā),它為我們提供了非常棒的輕量級數(shù)據(jù)交換的解決方案。

在Linux系統(tǒng)上安裝Mosquitto,建議使用源碼安裝模式,最新的源碼可從http://mosquitto.org/files/source/地址中獲取。解壓之后,我們可以在源碼目錄里面找到主要的配置文件config.mk,其中包含了所有Mosquitto的安裝選項,詳細(xì)的參數(shù)說明如下:

?C++ Code?

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647

#?是否支持tcpd/libwrap功能.#WITH_WRAP:=yes#?是否開啟SSL/TLS支持#WITH_TLS:=yes#?是否開啟TLS/PSK支持#WITH_TLS_PSK:=yes#?Comment?out?to?disable?client?client?threading?support.#WITH_THREADING:=yes#?是否使用嚴(yán)格的協(xié)議版本(老版本兼容會有點問題)#WITH_STRICT_PROTOCOL:=yes#?是否開啟橋接模式#WITH_BRIDGE:=yes#?是否開啟持久化功能#WITH_PERSISTENCE:=yes#?是否監(jiān)控運行狀態(tài)#WITH_MEMORY_TRACKING:=yes

這里需要注意的是,默認(rèn)情況下Mosquitto的安裝需要OpenSSL的支持;如果不需要SSL,則需要關(guān)閉config.mk里面的某些與SSL功能有關(guān)的選項(WITH_TLS、WITH_TLS_PSK)。接著,就是運行make install進行安裝,完成之后會在系統(tǒng)命令行里發(fā)現(xiàn)mosquitto、mosquitto_passwd、mosquitto_pub和mosquitto_sub四個工具(截圖如下),分別用于啟動代理、管理密碼、發(fā)布消息和訂閱消息。

【MQTT】MQTT簡介+安裝+使用
                    
            
python MQTT客戶端

配置&運行

安裝完成之后,所有配置文件會被放置于/etc/mosquitto/目錄下,其中最重要的就是Mosquitto的配置文件,即mosquitto.conf,以下是詳細(xì)的配置參數(shù)說明。

?C++ Code?

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353

#?=================================================================#?General?configuration#?=================================================================#?客戶端心跳的間隔時間#retry_interval?20#?系統(tǒng)狀態(tài)的刷新時間#sys_interval?10#?系統(tǒng)資源的回收時間,0表示盡快處理#store_clean_interval?10#?服務(wù)進程的PID#pid_file?/var/run/mosquitto.pid#?服務(wù)進程的系統(tǒng)用戶#user?mosquitto#?客戶端心跳消息的最大并發(fā)數(shù)#max_inflight_messages?10#?客戶端心跳消息緩存隊列#max_queued_messages?100#?用于設(shè)置客戶端長連接的過期時間,默認(rèn)永不過期#persistent_client_expiration#?=================================================================#?Default?listener#?=================================================================#?服務(wù)綁定的IP地址#bind_address#?服務(wù)綁定的端口號#port?1883#?允許的最大連接數(shù),-1表示沒有限制#max_connections?-1#?cafile:CA證書文件#?capath:CA證書目錄#?certfile:PEM證書文件#?keyfile:PEM密鑰文件#cafile#capath#certfile#keyfile#?必須提供證書以保證數(shù)據(jù)安全性#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#?消息自動保存功能的開關(guān)#autosave_on_changes?false#?持久化功能的開關(guān)persistence?true#?持久化DB文件#persistence_file?mosquitto.db#?持久化DB文件目錄#persistence_location?/var/lib/mosquitto/#?=================================================================#?Logging#?=================================================================#?4種日志模式:stdout、stderr、syslog、topic#?none?則表示不記日志,此配置可以提升些許性能log_dest?none#?選擇日志的級別(可設(shè)置多項)#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#?用戶/密碼文件,默認(rèn)格式:username:password#password_file#?PSK格式密碼文件,默認(rèn)格式:identity:key#psk_file#?pattern?write?sensor/%u/data#?ACL權(quán)限配置,常用語法如下:#?用戶限制:user?<username>#?話題限制:topic?[read|write]?<topic>#?正則限制:pattern?write?sensor/%u/data#acl_file#?=================================================================#?Bridges#?=================================================================#?允許服務(wù)之間使用“橋接”模式(可用于分布式部署)#connection?<name>#address?<host>[:<port>]#topic?<topic>?[[[out?|?in?|?both]?qos-level]?local-prefix?remote-prefix]#?設(shè)置橋接的客戶端ID#clientid#?橋接斷開時,是否清除遠(yuǎn)程服務(wù)器中的消息#cleansession?false#?是否發(fā)布橋接的狀態(tài)信息#notifications?true#?設(shè)置橋接模式下,消息將會發(fā)布到的話題地址#?$SYS/broker/connection/<clientid>/state#notification_topic#?設(shè)置橋接的keepalive數(shù)值#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密鑰文件#bridge_cafile#bridge_capath#bridge_certfile#bridge_keyfile#?自己的配置可以放到以下目錄中include_dir?/etc/mosquitto/conf.d

最后,啟動Mosquitto服務(wù)很簡單,直接運行命令行即可開啟服務(wù):

mosquitto -c /etc/mosquitto/mosquitto.conf -d

MQTT使用方法

測試MQTT服務(wù)器

方法:

如現(xiàn)在有一個MQTT服務(wù)器(MQTT Broker),可以把我門剛才搭建的服務(wù)器來拿來做這個測試,暫且叫做S:

地址:mq.tongxinmao.com

端口:18831

【MQTT】MQTT簡介+安裝+使用
                    
            
python MQTT客戶端

兩個需要MQTT通信的設(shè)備均下載安裝MQTT客戶端軟件,兩個設(shè)備都運行MQTT客戶端軟件,且都連接上MQTT服務(wù)器S:

然后一個設(shè)備A的MQTT客戶端訂閱一個主題:“/topic/qos0”(訂閱主題的client就是subscriber);

另一個設(shè)備B的MQTT客戶端向MQTT服務(wù)器A發(fā)布一個主題為:“/topic/qos0”的消息”hello,BZL first mqtt message!”。(發(fā)布主題的client就是Publisher)

可以看到訂閱主題“/topic/qos0”的A的客戶端收到了消息”hello,BZL first mqtt message!”。

初體驗實例:

我們安裝通信貓通信調(diào)試軟件(內(nèi)嵌MQTT客戶端):通信貓調(diào)試助手http://www.tongxinmao.com/Topic/Detail/id/6

(這里為了簡便,發(fā)布和訂閱都用同一個電腦)

打開軟件,點擊“網(wǎng)絡(luò)”--->”MQTT”,在參數(shù)界面,輸入MQTT服務(wù)器地址和端口號:

地址:mq.tongxinmao.com

端口:18831

用戶名和密碼:TEST,TEST

輸入訂閱主題:“/topic/qos0”

輸入發(fā)布主題:“/topic/qos0”

勾選”啟動“連接上MQTT服務(wù)器,

【MQTT】MQTT簡介+安裝+使用
                    
            
python MQTT客戶端

然后在數(shù)據(jù)框輸入要發(fā)布是消息,然后點擊發(fā)布。這樣所有訂閱主題“/topic/qos0”的客戶端都可以接收到該消息:

【MQTT】MQTT簡介+安裝+使用
                    
            
python MQTT客戶端

把上面的MQTT服務(wù)器地址和端口號替換成我們剛才部署的Mosquitto的地址和監(jiān)聽端口,就可以測試我們自己搭建的MQTT服務(wù)器了。

程序中使用MQTT

我們上面是用的客戶端工具測試MQTT,程序中使用MQTT指的是程序成為MQTT通信系統(tǒng)的客戶端,向MQTT服務(wù)器訂閱主題或發(fā)布MQTT消息。

程序要向MQTT服務(wù)器訂閱主題或者發(fā)布MQTT消息,則工程中包含MQTT客戶端的庫文件,然后程序調(diào)用庫中的MQTT接口函數(shù),向MQTT服務(wù)器訂閱主題或發(fā)布消息。

以python為例,paho.mqtt.client是python的一個MQTT客戶端庫(包):

?Python Code?

12345

#?encoding:?utf-8#!/usr/bin/python3

import?paho.mqtt.client?as?mqtt?????????????????#導(dǎo)入mqtt客戶端的包client?=?mqtt.Client()??????????????????????????#調(diào)用mqtt客戶端庫的函數(shù)創(chuàng)建對象client.username_pw_set(”myUsername”, ”myPassword”)

client.connect("114.55.242.49",?1883,?60)??????#調(diào)用mqtt客戶端庫client對象的connect方法連接上MQTT服務(wù)器client.subscribe("/topic/qos0")????????????????#訂閱主題client.loop_forever()

使用Python發(fā)送、訂閱消息

需要用到的包為paho-mqttpip install paho-mqtt

?Python Code?

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748

#?-*-?coding:?utf-8?-*-#?以下代碼在2019年2月28日?python3.6環(huán)境下運行通過import?paho.mqtt.client?as?mqttimport?jsonimport?timeHOST?=?"10.8.9.21"PORT?=?1883client_id?=?"1083421xxxxx"???????????????????????#?沒有就不寫,此處部分內(nèi)容用xxx代替原內(nèi)容,下同def?on_connect(client,?userdata,?flags,?rc):print("Connected?with?result?code?"+str(rc))????client.subscribe("data/receive")?????????#?訂閱消息def?on_message(client,?userdata,?msg):print("主題:"+msg.topic+"?消息:"+str(msg.payload.decode('utf-8')))def?on_subscribe(client,?userdata,?mid,?granted_qos):print("On?Subscribed:?qos?=?%d"?%?granted_qos)def?on_disconnect(client,?userdata,?rc):if?rc?!=?0:print("Unexpected?disconnection?%s"?%?rc)data?=?{"type":2,"timestamp":?time.time(),"messageId":"9fcda359-89f5-4933-xxxx","command":"xx/recommend","data":{"openId":"xxxx","appId":xxxx,"recommendType":"temRecommend"????}}param?=?json.dumps(data)client?=?mqtt.Client(client_id)client.username_pw_set("xxxxxx",?"xxxxxx")client.on_connect?=?on_connectclient.on_message?=?on_messageclient.on_subscribe?=?on_subscribeclient.on_disconnect?=?on_disconnectclient.connect(HOST,?PORT,?60)client.publish("data/send",?payload=param,?qos=0)?????#?發(fā)送消息client.loop_forever()

python MQTT客戶端

?需要安裝的python庫

?使用python編寫程序進行測試MQTT的發(fā)布和訂閱功能。首先要安裝:pip install paho-mqtt

測試發(fā)布(pub)

?我的MQTT部署在阿里云的服務(wù)器上面,所以我在本機上編寫了python程序進行測試。

然后在shell里面重新打開一個終端,訂閱一個主題為“chat”?mosquitto_sub -t chat

?在本機上測試遠(yuǎn)程的MQTT的發(fā)布功能就是把自己作為一個發(fā)送信息的人,當(dāng)自己發(fā)送信息的時候,所有訂閱過該主題(topic)的對象都將收到自己發(fā)送的信息。?
mqtt_client.py

# encoding: utf-8
import paho.mqtt.client as mqtt

HOST = "101.200.46.138"
PORT = 1883

 
def test():

    client = mqtt.Client()

    client.connect(HOST, PORT, 60)

    client.publish("chat","hello liefyuan",2) # 發(fā)布一個主題為'chat',內(nèi)容為‘hello liefyuan’的信息

    client.loop_forever()


if __name__ == '__main__':

    test()

發(fā)布/訂閱測試

# -*- coding: utf-8 -*-
import paho.mqtt.client as mqtt

MQTTHOST = "101.200.46.138"
MQTTPORT = 1883

mqttClient = mqtt.Client()

# 連接MQTT服務(wù)器

def on_mqtt_connect():

    mqttClient.connect(MQTTHOST, MQTTPORT, 60)

    mqttClient.loop_start()


# publish 消息

def on_publish(topic, payload, qos):

    mqttClient.publish(topic, payload, qos)


# 消息處理函數(shù)
def on_message_come(lient, userdata, msg):
    print(msg.topic + " " + ":" + str(msg.payload))

 
# subscribe 消息
def on_subscribe():

    mqttClient.subscribe("/server", 1)

    mqttClient.on_message = on_message_come # 消息到來處理函數(shù)

 
def main():

    on_mqtt_connect()

    on_publish("/test/server", "Hello Python!", 1)

    on_subscribe()

    while True:

        pass


if __name__ == '__main__':

    main()

注解函數(shù):

client.connect(self, host, port, keepalive, bind_address)

client.publish(self, topic, payload, qos, retain)

client.subscribe(self, topic, qos)

測試訂閱(sub)

?在本機上編寫程序測試訂閱功能,就是讓自己的程序作為一個接收者,同一個主題沒有發(fā)布(pub)信息的時候,就自己一直等候。

# encoding: utf-8
import paho.mqtt.client as mqtt

 
def on_connect(client, userdata, flags, rc):

    print("Connected with result code "+str(rc))

    client.subscribe("chat")


def on_message(client, userdata, msg):

    print(msg.topic+" " + ":" + str(msg.payload))


client = mqtt.Client()

client.on_connect = on_connect

client.on_message = on_message

client.connect("www.liefyuan.top", 1883, 60)

client.loop_forever()

C語言?MQTT客戶端

http://t.csdn.cn/bHxPj文章來源地址http://www.zghlxwxcb.cn/news/detail-428639.html

到了這里,關(guān)于【MQTT】MQTT簡介+安裝+使用 python MQTT客戶端的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • wxbit appinventor 使用MQTT客戶端連接onenet時的坑

    wxbit appinventor 使用MQTT客戶端連接onenet時的坑

    在最近使用wxbit中的MQTT客戶端時遇見一些小問題,在開始不知道具體怎么連接上自己的onenet產(chǎn)品,后面通過查閱資料解決了問題 寫下這篇博客是為了記錄相關(guān)問題 將mqtt客戶端拖入后,點擊MQTT客戶端,便可以查看組件屬性 上圖4個屬性決定的你連接的是哪個服務(wù)器和哪個設(shè)備

    2024年02月05日
    瀏覽(71)
  • MQTT 常用客戶端庫介紹 (全面涵蓋c,c++,java,c#,python)

    MQTT 常用客戶端庫介紹 (全面涵蓋c,c++,java,c#,python)

    MQTT(Message Queuing Telemetry Transport)是一種輕量級的通信協(xié)議,被廣泛應(yīng)用于物聯(lián)網(wǎng)和分布式系統(tǒng)中。它以其簡單、可靠和高效的特性而備受推崇,成為連接設(shè)備和應(yīng)用程序的首選協(xié)議。MQTT的重要性不言而喻,它為實時通信提供了可靠的解決方案,使得設(shè)備之間的數(shù)據(jù)交換和控

    2024年02月08日
    瀏覽(17)
  • 一文搞懂MQTT,如何在SpringBoot中使用MQTT實現(xiàn)消息的訂閱和發(fā)布&MQTT 客戶端重連

    一文搞懂MQTT,如何在SpringBoot中使用MQTT實現(xiàn)消息的訂閱和發(fā)布&MQTT 客戶端重連

    簡介: 之前介紹了RabbitMQ以及如何在SpringBoot項目中整合使用RabbitMQ,看過的朋友都說寫的比較詳細(xì),希望再總結(jié)一下目前比較流行的MQTT。所以接下來,就來介紹什么MQTT?它在IoT中有著怎樣的作用?如何在項目中使用MQTT? 之前介紹了RabbitMQ以及如何在SpringBoot項目中整合使用

    2024年02月05日
    瀏覽(22)
  • 【Python】Python 網(wǎng)絡(luò)編程 ( Socket 套接字簡介 | Socket 套接字使用步驟 | Socket 套接字服務(wù)端與客戶端開發(fā) )

    【Python】Python 網(wǎng)絡(luò)編程 ( Socket 套接字簡介 | Socket 套接字使用步驟 | Socket 套接字服務(wù)端與客戶端開發(fā) )

    Socket 套接字 是一種 進程之間的 通信機制 , 通過套接字可以在 不同的進程之間 進行數(shù)據(jù)交換 ; 在 網(wǎng)絡(luò)編程 中 , Socket 套接字 主要用于 客戶端 與 服務(wù)器 之間的 通信 , 大部分 網(wǎng)絡(luò)相關(guān)的應(yīng)用程序 , 都使用到了 Socket 套接字技術(shù) ; 套接字有兩種類型 : 流套接字 : 提供了一個可

    2024年02月15日
    瀏覽(604)
  • SpringBoot中使用Spring integration加Eclipse Paho Java Client 實現(xiàn)MQTT客戶端

    Spring Integration 是一個開源的集成消息處理框架,它提供了消息傳遞、消息過濾、消息轉(zhuǎn)換、消息路由等功能,可以用于構(gòu)建異步、分布式的系統(tǒng)。 Spring-integration-stream是Spring Integration框架的一個組件,用于在不同的系統(tǒng)和應(yīng)用之間進行消息傳遞、集成和流處理。 它提供了一套

    2024年02月10日
    瀏覽(19)
  • mqtt安卓客戶端

    1.MQTT(消息隊列遙測傳輸協(xié)議),是一種基于 發(fā)布/訂閱 (publish/subscribe)模式的\\\"輕量級\\\"通訊協(xié)議, 該協(xié)議構(gòu)建于TCP/IP協(xié)議上 。MQTT最大優(yōu)點在于,可以以極少的代碼和有限的帶寬,為連接遠(yuǎn)程設(shè)備提供實時可靠的消息服務(wù)。作為一種低開銷、低帶寬占用的即時通訊協(xié)議,使

    2024年02月10日
    瀏覽(21)
  • QT使用MQTT協(xié)議連接ONENET云平臺:智能家居PC客戶端開發(fā)筆記-1 環(huán)境搭建

    QT使用MQTT協(xié)議連接ONENET云平臺:智能家居PC客戶端開發(fā)筆記-1 環(huán)境搭建

    前端時間做了一個項目,要求在PC端使用QT制作一個客戶端,用來接收從單片機上傳到Onennet的數(shù)據(jù),并且還要下發(fā)指令。當(dāng)時弄了好幾天,中途遇見了非常多的問題,所以寫下這篇文章記錄一下,同時分享一下自己的經(jīng)驗。 我的環(huán)境:QT 5.12.6 總結(jié)下我遇見的難點: 1,環(huán)境配

    2024年02月11日
    瀏覽(29)
  • QT使用MQTT協(xié)議連接ONENET云平臺:智能家居PC客戶端開發(fā)筆記-2 項目開發(fā)

    QT使用MQTT協(xié)議連接ONENET云平臺:智能家居PC客戶端開發(fā)筆記-2 項目開發(fā)

    這篇文章主要是分享QT智能家居項目的代碼 在我看來,QT MQTT的使用主要難點就是對于環(huán)境的搭建,在我們把環(huán)境搭建完之后,接下來就是傳統(tǒng)手藝了,我們只要知道相應(yīng)的庫函數(shù),調(diào)用它,就能實現(xiàn)我們所需要的功能了。 所以,在這里我也只是簡單的分享一下我寫的第一版

    2024年02月16日
    瀏覽(23)
  • mqtt服務(wù)器搭建與qt下的mqtt客戶端實現(xiàn)

    mqtt服務(wù)器搭建與qt下的mqtt客戶端實現(xiàn)

    ??MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協(xié)議),是一個基于客戶端-服務(wù)器的消息發(fā)布/訂閱傳輸協(xié)議。MQTT協(xié)議是輕量、簡單、開放和易于實現(xiàn)的,這些特點使它適用范圍非常廣泛。在很多情況下,包括受限的環(huán)境中,如:機器與機器(M2M)通信和物聯(lián)網(wǎng)(Io

    2024年02月06日
    瀏覽(26)
  • NFS服務(wù)器簡介、在Linux上搭建NFS服務(wù)器和客戶端,使用autofs進行NFS客戶端自動掛載和卸載詳解

    NFS服務(wù)器簡介、在Linux上搭建NFS服務(wù)器和客戶端,使用autofs進行NFS客戶端自動掛載和卸載詳解

    目錄 一.NFS服務(wù)器簡介 1.含義簡介: 2.工作原理簡介: 3.RPC服務(wù)與NFS服務(wù)配合使用 二.NFS配置文件參數(shù)命令介紹 1.主配置文件/etc/exports 2.日志文件/var/lib/nfs/ 3.showmount命令 三.主配置文件/etc/exports掛載寫法 1.配置nfs服務(wù)端和客戶端 2.windows客戶端掛載測試 3.權(quán)限介紹 (1)rw/ro,服

    2024年02月04日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包