为主题创建多个客户端

Creating multiple clients for topics

我正在从一个 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)

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

好的,首先你真的不想在没有非常好的理由的情况下在同一个进程中创建多个客户端(我能想到的唯一一个是代表多个用户的后端服务器有不同的 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()