为主题创建多个客户端

时间:2019-07-31 07:03:05

标签: python mqtt subscribe

从Sqlite3数据库中,我正在收集多个要订阅的mqtt主题。我从数据库中选择主题,并将其放入列表中。 现在,我想为每个主题(列表中的每个项目)创建一个客户端并订阅该主题。这样我就有多个订阅不同主题的客户。

这是我从数据库中获取主题的方法:

connection = sqlite3.connect(MainDatabaseDirectory)
cursor = connection.cursor() 
cursor.execute("""SELECT * FROM 'List'""")
for dataset in cursor:
    topic = ''.join(dataset[0])
    topicList.append(topic) 

这就是我尝试创建多个客户端并订阅主题的方式:

   for i in range(len(topicList)):
       topic = ''.join(topicList[i])
       client = mqtt.Client(topic)
       client.connect(mqttBrokerIpAddress, Port)
       client.subscribe(topic)

任何人都可以告诉我,我的问题出在哪里或者我需要做些什么来做得更好? 甚至可以创建多个客户端来订阅不同的主题吗?

1 个答案:

答案 0 :(得分:0)

好吧,首先,您真的不想在没有非常充分的理由的情况下在同一流程中创建多个客户端(我能想到的唯一一个后端服务器代表具有不同ACL的多个用户运行) )。

单个客户可以订阅许多主题(正如我们第一次posted第一次回答时所讨论的那样)。

您发布的代码创建了多个客户端,但是随后立即丢弃了对它们的任何引用,并用它创建的下一个客户端覆盖了它。

创建1个客户端,订阅许多主题。

def on_connect(client, userdata, flags, rc)
  global topicList
  for i in range(len(topicList)):
       topic = ''.join(topicList[i])
       client.subscribe(topic)

def on_message(client, userdata, message)
  # do something with the message
  # the topic the message arrived on will be in
  # message.topic

connection = sqlite3.connect(MainDatabaseDirectory)
cursor = connection.cursor() 
cursor.execute("""SELECT * FROM 'List'""")
for dataset in cursor:
    topic = ''.join(dataset[0])
    topicList.append(topic) 

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect(mqttBrokerIpAddress, Port)
client.loop_forever()