mqtt python包回调分析

  1. mqtt的python包,回调函数比较复杂,每次在连接之前,需要先实现回调函数,回调函数的传入参数固定
def on_connect(client, userdata, flages, rc):
    print("connect with " + str(rc))

将回调函数赋给主函数

client.on_connect = on_connect
  1. 分析一下源代码
    2.1 首先查看client类的on_connect定义
 self._on_connect = None

直接定义为空,即需要外部实现
将on_connect设置为属性,也没什么奇怪

@property
    def on_connect(self):       
        return self._on_connect

    @on_connect.setter
    def on_connect(self, func):        
        with self._callback_mutex:
            self._on_connect = func

2.2 在_handle_connack函数中,发现了一些异常

with self._callback_mutex:
            if self.on_connect:
                flags_dict = {}
                flags_dict['session present'] = flags & 0x01
                with self._in_callback_mutex:
                    try:
                        self.on_connect(self, self._userdata, flags_dict, result)
                    except Exception as err:
                        self._easy_log(MQTT_LOG_ERR, 'Caught exception in on_connect: %s', err)

此处即为调用外部传入的on_connect函数

  1. 再看下_handle_connack这个函数什么情况下调用
def _packet_handle(self):
      elif cmd == CONNACK:
            return self._handle_connack()

在_packet_handle函数中调用
----> _packet_read ----> loop_read ----> loop ----> loop.start
这个路数就清楚了
先定义回调函数,然后loop.start后,开始执行。

你可能感兴趣的:(mqtt python包回调分析)