python3生成二维码实例fromm_Python使用mqtt极简例子
mqtt簡介
一種數據傳輸協議,不怎么耗資源,適合物聯網遠程傳數據。比如一個傳感器要發數據給電腦,那么需要開一個mqtt服務器(Broker),然后傳感器作為客戶端(client)通過mqtt服務器發布(publish)某個主題(topic)的消息(message),電腦也作為客戶端,連接(connect)到mqtt服務器,且訂閱(subscribe)該主題,就能收到消息。
搭建一個mqtt服務器
推薦EMQX,直接選擇合適的版本下載壓縮包,這里選擇了emqx-windows7-v3.2.2.zip,解壓后,進入bin目錄,啟動服務器:
D:>\emqx\bin>emqx.cmd start
如果要關閉服務器,只需如此:
D:>\emqx\bin>emqx.cmd stop
啟動服務器后,瀏覽器打開http://127.0.0.1:18083,使用默認管理賬號admin/public即可登錄查看,在設置里還能改成中文界面,很方便。
編寫Python例子
首先安裝mqtt模塊:
pip install paho-mqtt
寫一個發布客戶端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的時間間隔
client.publish('fifa', payload='amazing', qos=0)
再寫一個接受客戶端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的時間間隔
client.subscribe('fifa', qos=0)
client.loop_forever() # 保持連接
可以先運行sub.py,然后就開始持續監聽,別關。另開一個窗口運行pub.py,然后之前的客戶端就能接收到消息了,發一次收一次。
保持連接
這里我的理解也不夠深,不過大體能用。
loop()感覺是一個心跳函數,用來保持客戶端與服務器的連接。比如keepalive參數為60秒,那么60秒內必須loop()一下或者發布一下消息,不然連接會斷,就無法繼續發布或者接受消息。
loop_start()是啟用一個進程保持loop()的重復調用,就不需要定期心跳了,對應的有loop_stop()。
loop_forever()用來保持無窮阻塞調用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."""
舉例來說明幾種用法,對于發布客戶端,第一種保持連接的方式是在keeplive的間隔內,發布消息或者調用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) # 不能超過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) # 可以超過5秒了
對于訂閱客戶端,一種方法是使用loop_start()保持連接,然后寫個死循環阻塞程序,保持監聽。
client.connect('127.0.0.1', 1883, 5)
client.subscribe('fifa', qos=0)
client.loop_start()
while True:
pass
第二種方法直接使用loop_forever(),也能阻塞運行:
client.connect('127.0.0.1', 1883, 5)
client.subscribe('fifa', qos=0)
client.loop_forever()
都能持續接受消息。
參考
總結
以上是生活随笔為你收集整理的python3生成二维码实例fromm_Python使用mqtt极简例子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 子网规划与组网实验_【干货】从0到1,“
- 下一篇: python怎么创建子类_Python: