Python - несколько подписок MQTT - ограничения - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть n-raspberry pi's , и я бы хотел, чтобы каждый из них подписался на остальных, так как они все действуют как брокеры. Серверы и клиенты работают отлично, но хотелось бы знать, есть ли какие-то ограничения. Я планирую запустить сценарии подписки в потоках. Это требования:

  • Скорость (я что-то публикую, и многие писатели получают сообщение одновременно )
  • Неограниченные подписки (я хочу до 50 пи в сети)

Идея заключается в создании децентрализованной сети. Вышесказанное можно легко заменить специальным пи, который будет действовать как централизованная единица, поэтому все пи подписываются на этот специальный пи и будут получать определенное сообщение одновременно. Но я предпочитаю децентрализованную архитектуру.

Возможно ли это, или есть какая-то проблема с сетью? ps: мне не хватает Пи, чтобы проверить это.

Я прикреплю код с классом подписки. Это работает, но я помещаю это здесь, потому что я не хочу только задавать вопрос, но по крайней мере способствовать. Это тот же класс, который я использую для подписки

import paho.mqtt.client as mqtt
import threading
import json
# Define Variables
MQTT_BROKER = ""
MQTT_PORT = 1883
MQTT_KEEPALIVE_INTERVAL = 45
MQTT_TOPIC = ""

class sub:
    def __init__(self,MQTT_TOPIC,MQTT_BROKER, MQTT_PORT,MQTT_KEEPALIVE_INTERVAL,transport = ''):
        self.MQTT_TOPIC = MQTT_TOPIC
        self.MQTT_BROKER =MQTT_BROKER
        self.MQTT_PORT = MQTT_PORT
        self.MQTT_KEEPALIVE_INTERVAL = MQTT_KEEPALIVE_INTERVAL
        # Initiate MQTT Client
        if transport == 'websockets':
            self.mqttc = mqtt.Client(transport='websockets')
            print('Here')
        else:
            self.mqttc = mqtt.Client()
        self.load = True
        tr = threading.Thread(target=self.start)
        tr.daemon = True
        tr.start()



    # Define on_connect event Handler
    def on_connect(self,selfs,mosq, obj, rc):
        #Subscribe tox a the Topic
        self.mqttc.subscribe(self.MQTT_TOPIC, 0)

    # Define on_subscribe event Handler
    def on_subscribe(self,mosq, obj, mid, granted_qos):
        print("Subscribed to MQTT Topic")

    # Define on_message event Handler
    def on_message(self,mosq, obj, msg):
        print(msg.payload)
        if self.load == True:
            msg.payload = json.loads(msg.payload)

    def start(self):
        # Initiate MQTT Client
        #self.mqttc = mqtt.Client()

        # Register Event Handlers
        self.mqttc.on_message = self.on_message
        self.mqttc.on_connect = self.on_connect
        self.mqttc.on_subscribe = self.on_subscribe

        # Connect with MQTT Broker
        self.mqttc.connect(MQTT_BROKER, MQTT_PORT, MQTT_KEEPALIVE_INTERVAL )

        # Continue the network loop
        self.mqttc.loop_forever()


s=sub(MQTT_TOPIC,MQTT_BROKER,MQTT_PORT,MQTT_KEEPALIVE_INTERVAL)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...