首页 > 编程语言 >python mqtt服务器搭建

python mqtt服务器搭建

时间:2023-02-09 19:22:11浏览次数:62  
标签:__ python import param mqtt client time 服务器

一.在Linux中搭建mqtt服务

环境:Linux 版本Ubuntu 18.04.1 LTS

1.进入https://www.emqx.com/zh/try?product=broker下载开源版本 EMQX

 此处选择zip格式

2.下载后将emqx-4.4.14-otp24.3.4.2-1-ubuntu18.04-amd64.zip文件通过FileZilla工具上传到linux中 /home/emqx目录下

3.进入到 /home/emqx 使用unzip命令解压文件

cd  /home/emqx
unzip emqx-4.4.14-otp24.3.4.2-1-ubuntu18.04-amd64.zip

4.进入到 /home/emqx/emqx/bin目录下启动服务,启动后 broker代理 访问地址为本机,默认端口为1883,端口可修改

./emqx start

到此已完成了简单的linux mqtt服务搭建

二.使用python 实现 Subscribe(订阅者)

server:

import json
import sys
import logging
import os
import time
import paho.mqtt.client as mqtt


filename = str(os.path.basename(__file__).split('.')[0]) + ".log"
logger = logging.getLogger()
logger.setLevel(logging.INFO)
push_log = logging.FileHandler(filename, 'a', encoding='utf-8')
push_log.setLevel(logging.INFO)
logger.addHandler(push_log)


def on_connect(client, userdata, flags, rc):
    """
    订阅主题
    :param client:
    :param userdata:
    :param flags:
    :param rc:
    :return:
    """
    if not rc:
        print("ready go!")
        client.subscribe([("/data/#", 2), ("test", 2)])
    else:
        print("连接失败")


def on_message(client, userdata, msg):
    """
    接收客户端发送的消息
    :param client: 连接信息
    :param userdata:
    :param msg: 客户端返回的消息
    :return:
    """
    info1 = "---------接收客户端信息时间" + str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())) + "---------"
    print(info1)
    logger.info(info1)
    payload = json.loads(msg.payload.decode('utf-8'))
    print(payload)
    logger.info(payload)


def server_connect(client):
    client.on_connect = on_connect  # 启用订阅模式
    client.on_message = on_message  # 接收消息
    info2 = "-----------服务启动时间" + str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())) + "------------"
    print(info2)
    logger.info(info2)
    client.connect("111.111.111.111", 1883, 60)  # 连接到broker
    # client.loop_start()  # 以start方式运行,需要启动一个守护线程,让服务端运行,否则会随主线程死亡
    client.loop_forever()  # 以forever方式阻塞运行。


def server_stop(client):
    client.loop_stop()  # 停止服务端
    sys.exit(0)


def server_main():
    client_id = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
    client = mqtt.Client(client_id, transport='tcp')
    server_connect(client)


if __name__ == '__main__':
    # 启动监听
    server_main()

三.使用python 实现 Publish(发布者)

client:

import json
import paho.mqtt.client as mqtt
import time
import schedule

client_id = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
client = mqtt.Client(client_id, transport='tcp')
client.connect("111.111.111.111", 1883, 60)  # 连接到broker
client.loop_start()


def client_main(message: str):
    """
    客户端发布消息
    :param message: 消息体
    :return:
    """
    time_now = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
    payload = {"msg": "200 OK", "data": "{}".format(message), "send_time": "{}".format(time_now)}
    client.publish("test", json.dumps(payload, ensure_ascii=False))  # publish(主题, 消息体), 即test 为主题,
    # json.dumps(payload, ensure_ascii=False)为消息体
    print("{}".format(time_now) + "成功发送")
    return True


if __name__ == '__main__':
    msg = str({'label': 'packageName', 'score': '0.73040956', 'textrecog': 'YJ3EZ-S'})
    schedule.every(4).seconds.do(client_main, msg)  # 每4s执行一次
    while True:
        schedule.run_pending()

运行结果:

server端(Subscribe):

client端(publish):

 

标签:__,python,import,param,mqtt,client,time,服务器
From: https://www.cnblogs.com/mian-1122/p/17106560.html

相关文章

  • [oeasy]python0078_设置索引颜色_index_color_ansi_控制终端颜色
    更多颜色回忆上次内容上次了解了高亮颜色91-97是高亮前景色101-107是高亮背景色颜色种类在原来基础上增加了一些但也非常有限还想要更......
  • 人工智能(Python)教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介人工智能与Python初学者教程-通过简单易学的步骤学习人工智能从基础到高级概念,包括入门概念,入门,机器学习,数据准备,监督学习:分类,监督学习:回归,逻辑编程,无监督学习:聚......
  • 人工智能(Python)教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介人工智能与Python初学者教程-通过简单易学的步骤学习人工智能从基础到高级概念,包括入门概念,入门,机器学习,数据准备,监督学习:分类,监督学习:回归,逻辑编程,无监督学习:......
  • 1.大并发服务器架构Part1
    要提升服务器性能,就要有服务器高性能编程技术,就需要自己编码实现。另外服务器性能的几个性能杀手:1数据拷贝,数据从内核态copy到用户态,或者在用户态之间co......
  • 2.大并发服务器架构Part2
    ......
  • python中的上下文管理器以及python内建模块contextlib的contextmanager方法
    上下文管理器上下文管理器是实现了上下文管理协议的对象,其特有的语法是“with…as”。主要用于保存和恢复各种全局状态,关闭文件等,并为try…except…finally提供了一个方......
  • Python装饰器实例讲解(二)
    Python装饰器实例讲解(二)Python装饰器实例讲解(一)你最好去看下第一篇,虽然也不是紧密的链接在一起参考B站码农高天的视频,大家喜欢看视频可以跳转忽略本文:https://www......
  • Python一切皆对象_ type & object & class
    相比较于Java等静态语言,在Python中一切皆对象的概念更加彻底,函数和类都是对象,这样使得Python更加灵活。下面将对Python中对type、object以及class对关系进行梳理。关系图:......
  • Python中合法标识符需要满足什么条件?
    所谓的标识符就是用户在定义变量的时候,使用的一种名字,也可以说是一种符号,可应用于不同的环境,而且每一个符号都表示着不同的意思。在Python中,对于标识符的定义是有一定要......
  • PYTHON数据容器
    PYTHON数据容器一种可以容纳多份数据的数据类型,容纳的每一份数据称之为1个元素,每一个元素,可以使任意类型的数据数据容器根据特点的不同,分为五类:列表(list)、元组(tupl......