美文网首页
mqtt python包回调分析

mqtt python包回调分析

作者: heliping_peter | 来源:发表于2019-08-23 18:46 被阅读0次
    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包回调分析

          本文链接:https://www.haomeiwen.com/subject/xmztectx.html