У меня есть 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)