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()

都能持续接受消息。

参考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520860.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle imp 包,oracle imp

exp/imp命令以及commity参数1、导出确认ORACLE_SID正确需要sysem用户,可以不用grant execute flashback to user,system密码******export ORACLE_SID***(无单机多实例的无需做)exp system/****** tables...文章技术小阿哥2017-11-27923浏览量ORACLE exp/…

RabbitMQ+haproxy+keeplived 高可用负载均衡高可用镜像集群队列_01

文章目录一、RabbitMQ 集群节点说明二、服务器hosts文件统一修改三、RabbitMQ 镜像集群队列搭建部署一、RabbitMQ 集群节点说明 服务器IPhostname节点说明端口管控台地址账号密码192.168.0.115mq-01rabbitmq master5672http://192.168.0.115:15672guestguest192.168.0.117mq-0…

vue click事件_Vue.js---实现前后端分离架构中前端页面搭建(二)

【Vue.js实现前后端分离架构中前端页面搭建】九、Vue的事件处理Vue的事件都是使用 v-on:事件类型 进行绑定。也可以使用事件类型进行操作。其中事件类型和之前学习jQuery中事件名称是一样。示例中都是以点击事件为例。1. 直接操作属性值代码示例中通过点击按钮对counter值加一。…

边缘计算的五个大坑,里面一定有你跳过的

戳蓝字“CSDN云计算”关注我们哦!作者 | 砍柴网责编 | 阿秃在规模和增速方面,美国市场调研公司CB Insights估算,到2023年全球边缘计算行业,整体市场容量有望达到340亿美元。Technavio估计,从2018年到2022年&#xff0…

ora-07445 oracle 9,Oracle ORA-07445 : 出现异常错误: 核心转储(一)

ORA-07445: exception encountered: core dump [kghalp()58] [SIGSEGV] [Address not mapped to object] [0x000000068] [] []DUMP文件*** SERVICE NAME:(orcl) 2012-07-12 14:18:55.016*** SESSION ID:(258.58198) 2012-07-12 14:18:55.016Exception signal: 11 (SIGSEGV), co…

黑科技揭秘:眼科大夫如何应用5G+8K完成远程会诊?

秋季苹果新品发布会带来了iPhone迄今最大的显示屏,超视网膜显示屏比以往的iPhone屏幕更加清晰绚丽。随着影像技术的不断发展,多种多样的信息元素,通过一块块屏幕与我们交互,不管是手机手屏还是电视,不管是液晶还是OLED…

RabbitMQ 下载安装配置_集群高可用篇_02

文章目录1. 在线yum安装环境依赖2. 在线下载软件3. rpm安装软件4. 修改集群用户与连接心跳检测5. 启动rabbitmq6. 查看rabbitmq启动状态7. 安装管理插件8. 关闭防火墙9. 浏览器访问验证在3台mq服务器上分别操作如下: 这也是单机安装流程,只不过在3台机器…

基于TableStore的物联网元数据管理

背景 常见的企业级无线接入方案有两种,分别被称作廋AP和胖AP。瘦AP(ACAP)架构为比较传统的企业级无线接入方案,主要优点就是漫游体验好,但是AC宕机的话会导致所属的AP全部无法工作。对于大型的办公场所,漫…

python treeview文本自动换行显示_在tkinter.ttk.Treeview列中设置文本格式

我想知道如何调整ttk.Treeview列中的文本。下面是我的意思的一个例子。请注意日期和数字之间的位置不正确。我认为这和间距有关,但我可能错了。编辑:用Python 3编写。#! codingutf-8import pickleimport matplotlib.pyplot as pltimport tkinter as tkfr…

BDTC 2019 | 七个开发者能干多大的事?​

2015年,马云带领阿里巴巴集团的高管拜访了位于芬兰游戏公司supercell这家公司开发出了《部落战争》、《皇室战争》、《海岛奇兵》等App端知名游戏图片来自多玩BBS社区但是,这么知名的游戏公司开发团队当时却不足7人!整个团队好像cell一样&…

oracle导入导出版本规则,oracle expdp impdp 导出导入(支持高版本到低版本)

在plsql或sqlplus中创建目录:create or replace directory dmp11g as /home/oracle/dmps3;grant read,write on directory dmp11g to system;导出语句示例:expdp system/oracleip:1521/dbname directorydmp11g logfilexxx.log dumpfilexxx_%U.dmp parall…

服务器ip映射修改_集群高可用篇_01

分别修改5台服务器的hosts文件 vim /etc/hosts添加ip 映射 192.168.0.115 mq-01 192.168.0.117 mq-02 192.168.0.118 mq-03 192.168.0.119 hk-01 192.168.0.120 hk-02重新启动服务器 reboot

基于TableStore的海量电商订单元数据管理

一、背景 订单系统存在于各行各业,如电商订单、银行流水、运营商话费账单等,是一个非常广泛、通用的系统。对于这类系统,在过去十几年发展中已经形成了经典的做法。但是随着互联网的发展,以及各企业对数据的重视,需要…

python 文件上传 web_pythonweb自动化三种文件上传方法

文件上传三种方式:(一)查看元素标签,如果是input,则可以参照文本框输入的形式进行文件上传方法:和用户输入是一样的,使用send_keys步骤:1、找到定位元素,2,输入文件路径eledriver.fi…

Mac 神兵利器(三) 使用Intellij IDEA打造全栈IDE

前言 作为一个开发者,包括职业与业余,相信大家都在使用集成开发环境IDE。作为专业的开发者,相信大家都是Full Stack Developer,意味着我们的日常开发通常都会涉及多种编程语言比如Java、Python、Shell、Golang、大前端等&#xf…

阿里云与MongoDB达成战略合作,成“唯一”;苹果将推出三款5G版iPhone;谷歌正式推出 TensorFlow 企业版……...

戳蓝字“CSDN云计算”关注我们哦!嗨,大家好,重磅君带来的【云重磅】特别栏目,如期而至,每周五第一时间为大家带来重磅新闻。把握技术风向标,了解行业应用与实践,就交给我重磅君吧!重…

RabbitMQ 镜像集群队列_集群高可用篇_03

文章目录一、普通集群搭建1. 停止 全部 MQ服务节点2. 文件(.erlang.cookie)同步3. 组成集群操作3. slave 加入集群操作4. 查看集群状态5. 访问管控台界面二、配置镜像队列2.1. 镜像队列思路2.2. 策略执行2.3. 登录管控台查看配置的策略信息一、普通集群搭建 1. 停止 全部 MQ服…

oracle数据库触发器删除不,Oracle之后删除触发器

本Oracle教程解释了如何在Oracle中创建Before Delete触发器的语法和示例。Before Delete触发器表示Oracle将在执行删除操作之前触发此触发器。语法在Oracle / PLSQL中创建Before Delete触发器的语法是:CREATE [ OR REPLACE ] TRIGGER trigger_nameBEFORE DELETEON t…

MaxCompute Tunnel上传典型问题场景

数据问题 Q:使用Tunnel Java SDK上传数据,上传数据可以自动分配到各个分区吗? A:目前Tunnel是无法自动上传数据并自动分配到各个分区的:每一次上传只支持数据上传到一张表或表的一个分区,有分区的表一定要…

开箱即用的安全方案:MaxCompute数据安全方案介绍

MaxCompute 是一个支持多租户的统一大数据处理平台,不同的用户对数据安全需求不尽相同。为了满足不同租户对数据安全的灵活需求,MaxCompute 支持项目空间级别的安全配置,ProjectOwner 可以定制适合自己的外部账号支持和鉴权模型并且在某种程度…