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极简例子相关推荐

  1. python3生成二维码实例fromm_Python morphology.binary_dilation方法代碼示例

    本文整理匯總了Python中skimage.morphology.binary_dilation方法的典型用法代碼示例.如果您正苦於以下問題:Python morphology.binary_dila ...

  2. Laravel5中通过SimpleQrCode扩展包生成二维码实例

    简介 Simple QrCode 是基于强大的Bacon/BaconQrCode库开发的适用于当前最流行的Laravel框架的一个扩展库.便于Laravel用户可以很方便地使用. 翻译 我们在寻找可以 ...

  3. python3 生成二维码_windows使用python3.4生成二维码

    今天看到python可以直接生成二维码,手痒也想试一下.机器是windows操作系统,安装了python3.4版本.其实python生成二维码主要用到了qrcode这一二维码生成库,实现过程还是很简单 ...

  4. python3生成二维码中间带logo,有底图,可自定义文字

    效果: qrcode_result.png 代码: #!/user/bin/Python3 """ @Lanson @2019-11-02 ""&qu ...

  5. uniapp扫码和生成二维码 qrcodejs 实现详解

    1.扫码 官网:uniapp官网-扫码 在HBuilderX中建议使用真机进行调试(真机调试步骤请看第3点),运行成功后方可扫码,在这里进行了限制.需要注意的只有一点,res.scanType 打印出 ...

  6. 基于zxing生成二维码

    目录 1.二维码的原理 2.基于zxing生成二维码 3.逻辑及其应用 完整代码:https://github.com/122537067/zxingQRcodeLogoColor 效果图: 1.二维 ...

  7. unity 传输图片到本地服务器并生成二维码

    #unity 传输图片到本地服务器并生成二维码 电脑安装IIS: link. 在IE地址里输入localhost,能打开,就代表已经安装. ZXing.dll下载(放入unity): link. 服务 ...

  8. windows使用python3.4生成二维码

    1.首先下载qrcode库 使用pip命令: pip install qrcode python3.x以上的版本默认是安装好pip的,如果出现无法找到pip指令的信息的话,则需要首先安装pip. 2. ...

  9. python生成二维码_python生成二维码的实例详解

    python生成二维码的实例详解 版本相关 操作系统:Mac OS X EI Caption Python版本:2.7 IDE:Sublime Text 3 依赖库 Python生成二维码需要的依赖库 ...

最新文章

  1. 《JavaScript面向对象精要》——1.8 原始封装类型
  2. 基于opencv和QT的摄像头采集代码( GoQTtemplate3持续更新)
  3. [导入]用Ext做的登陆窗口的例子
  4. javascript实现base64加解密
  5. 廖雪峰Java1-3流程控制-9break、continue
  6. 打游戏要存进度-备忘录模式
  7. 苹果发布iOS 15.3正式版 修复了Safari浏览器漏洞
  8. 控件必须放在具有 runat=server 的窗体标记内错误的解决方法
  9. 在IDEA中,项目中出现红色波浪线解决办法
  10. Linux系统不同主机之间的时间同步
  11. Laravel教程 四:数据库和Eloquent
  12. 使用公司邮箱名登录之PHP代码实现
  13. 2009年IT行业最重要的十大认证
  14. 【论文推荐】结合KB和answer selection的相关论文推荐
  15. nsa php版本,mnsa网络
  16. 数论 欧几里德算法
  17. Sqlmap命令讲解
  18. 计算机去掉everyone访问权限,Win7提示您需要Everyone提供的权限才能对此文件进行更改的解决方法...
  19. AM437x——LED裸机
  20. html画布动画,画布动画(Canvas Animation)

热门文章

  1. Elasticsearch Painless Script详解
  2. CDH 6.x 安装 Phoenix 服务
  3. 一撕得:全员参与低代码开发,全面实现企业数字化管理
  4. 做到这4点,才是真正的持续交付| 研发效能提升36计
  5. 使用Kubernetes容器服务在云上搭建AI推理环境
  6. 今天的这个小成绩,需要向阿里云的朋友报告一下!
  7. 2018年最佳深度学习书单
  8. 一部手机是否能用 7 年?苹果、三星、Google:三年差不多!
  9. Ampere 收购 OnSpecta,加速对云原生应用程序的 AI 推理
  10. python sqlite3事务_python使用上下文管理器实现sqlite3事务机制