安装
首先安装paho-mqtt模块:
pip install paho-mqtt
按照官网的说法,该模块支持Python 2.7.9+ 或 3.5+。如果Py版本不对应,有可能无法使用。
simple demoimport 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
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更新