python mqtt客户端的使用

分类: Python

2020-10-14

|

112

|

评论:0

分享:

安装

首先安装paho-mqtt模块:

pip install paho-mqtt

按照官网的说法,该模块支持Python 2.7.9+ 或 3.5+。如果Py版本不对应,有可能无法使用。

官网地址:https://pypi.org/project/paho-mqtt/ 

simple  demo

import paho.mqtt.client as mqtt

# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))

    # Subscribing in on_connect() means that if we lose the connection and
    # reconnect then subscriptions will be renewed.
    client.subscribe("$SYS/#")

# The callback for when a PUBLISH message is received from the server.
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("mqtt.eclipse.org", 1883, 60)

# Blocking call that processes network traffic, dispatches callbacks and
# handles reconnecting.
# Other loop*() functions are available that give a threaded interface and a
# manual interface.
client.loop_forever()

API说明

Client(class)

可以通过利用Client类或其子类来实例化client对象,通常的用法如下:

  • 创建一个client实例
  • 调用某一个connect*()函数连接到一个broker(mqtt服务器),并且触发对应的回调函数
  • 调用某一个 loop*()函数和broker服务器保持网络连接
  • 利用 subscribe() 来订阅主题并接受消息
  • 利用publish() 来发布消息broker服务器
  • 利用disconnect()来和 broker服务器断开连接

类初始化说明:

Client(client_id="", clean_session=True, userdata=None, protocol=MQTTv311, transport="tcp")

client_id: 

        唯一的客户端ID,让服务器可以区分不同的客户端。如果为空或者None,则系统自动生成。

clean_session :

       布尔量,用来指定客户端的类型。为True时,如果该客户端与服务器断开连接,服务器将清除该客户端的所有连接信息;

如果为False,与服务器断开连接后服务器依然会保留客户端的连接信息,消息队列等。

userdata :

        pass


protocol :

       选择mqtt协议的版本,MQTTv31或MQTTv311。

transport :

        指定传输方式,“websockets” 或者“tcp“

在类初始化之后还可以重新初始化:

reinitialise(client_id="", clean_session=True, userdata=None)

reinitialise函数和初始化函数有同样的参数。

选项设置函数

下面的这些函数所对应选项可以修改客户端的某些默认的行为,它们大多数必须要在客户端建立连接之前进行设置。

MAX_INFLIGHT_MESSAGES_SET():

max_inflight_messages_set(self, inflight)

设置可以同步通过其网络流的 QoS > 0的最大消息数,默认值为20。数值增加会消耗更多的内存,但是可以增加吞吐量。

Qos保障设计

由通信中的报文标识符( Packet Identifier)传达。

  • Qos = 0: At most once delivery

    • 一次数据交换: Publish
  • Qos = 1: At least once delivery

    • 两次数据交换: Publish, Pubrec
  • Qos = 2: Exactly once delivery

    • 四次数据交换: Publish, Pubres, Pubrel, Pubcomp

来源:https://www.jianshu.com/p/31a7a69f9438

来源:https://stackoverflow.com/questions/41329267/mqtt-qos2-why-use-4-packets 


MAX_QUEUED_MESSAGES_SET()

max_queued_messages_set(self, queue_size)

设置输出消息队列中可以挂起的(QoS> 0时)最大输出消息数(消息队列的大小)。 默认值为0,表示无限制。当队列已满时,将丢弃后面传出消息。


MESSAGE_RETRY_SET()

message_retry_set(retry)

如果服务器未响应时,以retry秒为时间间隔尝试重发(QoS> 0)消息。 默认情况下,此设置为5秒。通常不需要更改。


WS_SET_OPTIONS()

ws_set_options(self, path="/mqtt", headers=None)

设置websocket连接选项。仅当将transport =“ websockets”传递到Client()构造函数中时,才使用这些选项。 

path 

服务器上mqtt访问路径。

headers 

指定那些应该附加到标准websocket header的额外header列表的字典,或者是采用正常websocket header并返回带有一组header的新字典以连接到可调用的服务器。 

必须在connect *()之前调用。 


TLS_SET()

tls_set(ca_certs=None, certfile=None, keyfile=None, cert_reqs=ssl.CERT_REQUIRED,
    tls_version=ssl.PROTOCOL_TLS, ciphers=None)

配置网络加密和身份验证选项。启用SSL / TLS支持。 

//20201015更新

//中文文档 https://www.cnblogs.com/lnn123/p/10837754.html

Powered by Froala Editor



转载请注明来源

文章:python mqtt客户端的使用

链接:/article/12

作者:大猫

本文共 0 个回复

发表评论 (对文章评论)

captcha