Я создаю проект, в котором у меня есть плата, которая действует как мастер, а затем несколько более слабых устройств, которые будут действовать как подчиненные. Все они работают на сервере flask и предоставляют разные маршруты для разных сервисов. Моя цель - сделать так, чтобы мастер мог сам находить всех подчиненных в одной сети. В настоящее время я делаю следующее:
На главном сервере
def get_data(url):
return requests.get(url,verify=False,timeout=0.5).content
@app.route('/findAll')
def discoverDevices():
rangeVals = range(2, 253)
addressFound=[]
for ping in rangeVals:
#networkMask is something like 192.168.0.
addressDevice = networkMask+str(ping)
address = addressDevice +":5000/me"
try:
print(ping)
addressFound.append("{ip:'"+addressDevice+":5000'"+",data:'"+get_data(address)+"'}");
print(get_data(address))
except:
print("An exception occurred:")
return addressFound;
На подчиненных
@app.route('/me')
def discover():
print(get_mac_address())
return jsonify(
id=get_mac_address(),
error=False
)
Хотя это позволяет мне находить подчиненных, мне кажется, что это не лучший метод, потому что иногда таймаута в 0,5 секунды недостаточно для подчиненного устройства для связи, и требуется много времени, чтобы найти их всех.
Идея состоит в том, чтобы найти более быстрый способ обнаружения устройств, чтобы я мог сохранить их IP-адреса и ма c. Итак, когда мне нужно что-то запросить у одного из них, мастер будет знать, куда отправить запрос.
Все они находятся в одной сети, и все сохранения выполняются по адресу, подобному этому 192.168.0 .x: 5000
Есть предложения?