zoukankan      html  css  js  c++  java
  • python Mqtt 的安装及使用

    简介&安装

    MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛.可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

    MQTT 提供两个核心功能:

    • 三种级别的消息发布服务质量
    • 基于订阅/发布的消息转发服务。

    有三种消息发布服务质量:

    • "至多一次",消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。这一种方式主要普通APP的推送,倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。

    • "至少一次",确保消息到达,但消息重复可能会发生。

    • "只有一次",确保消息到达一次。在一些要求比较严格的计费系统中,可以使用此级别。在计费系统中,消息重复或丢失会导致不正确的结果。这种最高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户收到且只会收到一次。

    安装方式见官网介绍:http://mosquitto.org/download/
    Mac 安装方式非常简单
    brew install mosquitto
    在这里插入图片描述安装完成,可以见它的配置文件为地址在 /usr/local/etc/mosquitto/mosquitto.conf
    启动MQTT服务命令为
    mosquitto -c /usr/local/etc/mosquitto/mosquitto.conf 即可开启服务
    如果提示 mosquitto 命令未找到,就添加一下环境变量

    MOSQUITTO_HOME=/usr/local/Cellar/mosquitto/1.6.9/sbin
    export MOSQUITTO_HOME
    export PATH=$PATH:$MOSQUITTO_HOME
    

    启动服务 brew services start mosquitto
    停止服务 brew services stop mosquitto

    发送消息命令
    mosquitto_pub -h 127.0.0.1 -p 1883 -t "mytopic" -m "222"
    表示向 主题为 mytopic 发送一条 内容为 222的消息

    添加订阅主题命令
    mosquitto_sub -h 127.0.0.1 -p 1883 -t "mytopic" -v
    表示向 mqtt中添加 一个主题为 mytopic 的监听
    在这里插入图片描述
    以上是命令的方式测试及验证相关功能,那么在python中代码如何调用呢

    Python 使用MQTT

    MqttClient.py

    import datetime
    import paho.mqtt.client as mqtt
    # 服务器地址
    strBroker = "localhost"
    # 通信端口
    port = 1883
    # 用户名
    username = 'username'
    # 密码
    password = 'password'
    # 订阅主题名
    topic = 'topic'
    
    def on_connect(mqttc, obj, rc):
        print("OnConnetc, rc: " + str(rc))
    
    def on_publish(mqttc, obj, mid):
        print("OnPublish, mid: " + str(mid))
    
    def on_subscribe(mqttc, obj, mid, granted_qos):
        print("Subscribed: " + str(mid) + " " + str(granted_qos))
    
    def on_log(mqttc, obj, level, string):
        print("Log:" + string)
    
    def on_message(mqttc, obj, msg):
        curtime = datetime.datetime.now()
        strcurtime = curtime.strftime("%Y-%m-%d %H:%M:%S")
        print(strcurtime + ": " + msg.topic + " " + str(msg.qos) + " " + str(msg.payload))
        on_exec(str(msg.payload))
    
    def on_exec(strcmd):
        print
        "Exec:", strcmd
    # =====================================================
    if __name__ == '__main__':
        mqttc = mqtt.Client("test")
        mqttc.on_message = on_message
        mqttc.on_connect = on_connect
        mqttc.on_publish = on_publish
        mqttc.on_subscribe = on_subscribe
        mqttc.on_log = on_log
    
        # 设置账号密码
        # mqttc.username_pw_set(username, password=password)
    
        mqttc.connect(strBroker, port, 60)
        mqttc.subscribe(topic, 0)
        mqttc.loop_forever()
    

    MqttServer.py

    import sys
    import datetime
    import socket, sys
    import paho.mqtt.publish as publish
    
    '''
    发送消息
    '''
    def transmitMQTT(strMsg):
        strMqttBroker = "localhost"
        strMqttTopic = "topic"
        publish.single(strMqttTopic, strMsg, hostname=strMqttBroker)
    
    if __name__ == '__main__':
        msg = "Hello,MQTT 2020!"
        transmitMQTT("msg")
        print("Send msg = [", msg, "] ok.")
    

    ps :如果Homebrew 更新太慢,可以替换Homebrew 源,具体参见这个文章

  • 相关阅读:
    Android(java)学习笔记68:使用proguard混淆android代码
    SGU 194 Reactor Cooling
    关于流量有上下界的网络流问题的求解
    关于最小割的求解方法
    HDU 5311 Hidden String
    POJ 3548 Restoring the digits
    POJ 2062 HDU 1528 ZOJ 2223 Card Game Cheater
    ZOJ 1967 POJ 2570 Fiber Network
    HDU 1969 Pie
    HDU 1956 POJ 1637 Sightseeing tour
  • 原文地址:https://www.cnblogs.com/luoman/p/12701316.html
Copyright © 2011-2022 走看看