日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python3生成二维码实例fromm_Python使用mqtt极简例子

發(fā)布時(shí)間:2024/9/27 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python3生成二维码实例fromm_Python使用mqtt极简例子 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

mqtt簡(jiǎn)介

一種數(shù)據(jù)傳輸協(xié)議,不怎么耗資源,適合物聯(lián)網(wǎng)遠(yuǎn)程傳數(shù)據(jù)。比如一個(gè)傳感器要發(fā)數(shù)據(jù)給電腦,那么需要開(kāi)一個(gè)mqtt服務(wù)器(Broker),然后傳感器作為客戶端(client)通過(guò)mqtt服務(wù)器發(fā)布(publish)某個(gè)主題(topic)的消息(message),電腦也作為客戶端,連接(connect)到mqtt服務(wù)器,且訂閱(subscribe)該主題,就能收到消息。

搭建一個(gè)mqtt服務(wù)器

推薦EMQX,直接選擇合適的版本下載壓縮包,這里選擇了emqx-windows7-v3.2.2.zip,解壓后,進(jìn)入bin目錄,啟動(dòng)服務(wù)器:

D:>\emqx\bin>emqx.cmd start

如果要關(guān)閉服務(wù)器,只需如此:

D:>\emqx\bin>emqx.cmd stop

啟動(dòng)服務(wù)器后,瀏覽器打開(kāi)http://127.0.0.1:18083,使用默認(rèn)管理賬號(hào)admin/public即可登錄查看,在設(shè)置里還能改成中文界面,很方便。

編寫Python例子

首先安裝mqtt模塊:

pip install paho-mqtt

寫一個(gè)發(fā)布客戶端pub.py:

import paho.mqtt.client as mqtt

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

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

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('127.0.0.1', 1883, 600) # 600為keepalive的時(shí)間間隔

client.publish('fifa', payload='amazing', qos=0)

再寫一個(gè)接受客戶端sub.py:

import paho.mqtt.client as mqtt

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

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

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('127.0.0.1', 1883, 600) # 600為keepalive的時(shí)間間隔

client.subscribe('fifa', qos=0)

client.loop_forever() # 保持連接

可以先運(yùn)行sub.py,然后就開(kāi)始持續(xù)監(jiān)聽(tīng),別關(guān)。另開(kāi)一個(gè)窗口運(yùn)行pub.py,然后之前的客戶端就能接收到消息了,發(fā)一次收一次。

保持連接

這里我的理解也不夠深,不過(guò)大體能用。

loop()感覺(jué)是一個(gè)心跳函數(shù),用來(lái)保持客戶端與服務(wù)器的連接。比如keepalive參數(shù)為60秒,那么60秒內(nèi)必須loop()一下或者發(fā)布一下消息,不然連接會(huì)斷,就無(wú)法繼續(xù)發(fā)布或者接受消息。

loop_start()是啟用一個(gè)進(jìn)程保持loop()的重復(fù)調(diào)用,就不需要定期心跳了,對(duì)應(yīng)的有l(wèi)oop_stop()。

loop_forever()用來(lái)保持無(wú)窮阻塞調(diào)用loop(),原文如下:

"""This function call loop() for you in an infinite blocking loop.

It is useful for the case where you only want to run the MQTT client loop in your program."""

舉例來(lái)說(shuō)明幾種用法,對(duì)于發(fā)布客戶端,第一種保持連接的方式是在keeplive的間隔內(nèi),發(fā)布消息或者調(diào)用loop()。

client.connect('127.0.0.1', 1883, 5) # keeplive僅為5秒

for i in range(100):

client.publish('fifa', payload=f'amazing{i}', qos=0)

# client.loop() # 或者loop()

time.sleep(4) # 不能超過(guò)5秒

第二種方式是使用loop_start():

client.connect('127.0.0.1', 1883, 5)

client.loop_start()

for i in range(100):

client.publish('fifa', payload=f'amazing{i}', qos=0)

time.sleep(6) # 可以超過(guò)5秒了

對(duì)于訂閱客戶端,一種方法是使用loop_start()保持連接,然后寫個(gè)死循環(huán)阻塞程序,保持監(jiān)聽(tīng)。

client.connect('127.0.0.1', 1883, 5)

client.subscribe('fifa', qos=0)

client.loop_start()

while True:

pass

第二種方法直接使用loop_forever(),也能阻塞運(yùn)行:

client.connect('127.0.0.1', 1883, 5)

client.subscribe('fifa', qos=0)

client.loop_forever()

都能持續(xù)接受消息。

參考

總結(jié)

以上是生活随笔為你收集整理的python3生成二维码实例fromm_Python使用mqtt极简例子的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。