欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入免费知识星球。

Python使用paho-mqtt进行MQTT消息通讯

Python基础 迷途小书童 4年前 (2019-12-08) 4937次浏览 0个评论

软硬件环境

  • ubuntu 18.04 64bit
  • anaconda3 & python3.6.2
  • paho-mqtt

预备知识

参考之前写的一篇博文 https://xugaoxiang.com/2019/12/08/mqtt/,博文测试时mqtt broker采用的是mosquitto,同时在测试发送和接收时采用mosquitto_submosquitto_pub命令行工具。

安装paho-mqtt

conda install paho-mqtt

代码实践

import paho.mqtt.client as mqtt

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

    :param client:
    :param userdata:
    :param flags:
    :param rc:
    :return:
    '''

    print('connect with rc: {}'.format(rc))

    if rc != 0:
        print('pub connect failed.')
        client.disconnect()

def on_disconnect(client, userdata, rc=0):
    '''

    :param client:
    :param userdata:
    :param rc:
    :return:
    '''

    print('disconnect with rc: {}'.format(rc))

    client.loop_stop()

def on_publish(client, userdata, mid):
    '''

    :param client:
    :param userdata:
    :param mid:
    :return:
    '''

    print('publish success.')

def do_publish(topic, message):

    '''
    :param topic:
    :param message:
    :return: publish message via mqtt
    '''

    client = mqtt.Client()
    client.on_connect = on_connect
    client.on_disconnect = on_disconnect
    client.on_publish = on_publish

    client.connect(host='127.0.0.1', port=1883, keepalive=60)
    client.loop_start()

    try:
        client.publish('{}'.format(topic), '{}'.format(message))
    except:
        print('publish {} exception.'.format(message))
    finally:
        client.disconnect()

上述代码完成的是信息发布,分别实现了客户端连接、发布、断开的回调,在connect之后调用loop_start(),其作用是开启新的后台线程,防止主线程被阻塞,在client断开后要loop_stop杀掉线程。

信息的订阅寄接收的过程跟发布是一样的,publish换成subscribe,接收在on_message回调里进行处理。

参考资料

喜欢 (0)

您必须 登录 才能发表评论!

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

请关闭 Adblock 等类似浏览器插件,然后刷新页面访问,感谢您的支持!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.