Обнаружение устройств в той же сети flask - PullRequest
0 голосов
/ 28 мая 2020

Я создаю проект, в котором у меня есть плата, которая действует как мастер, а затем несколько более слабых устройств, которые будут действовать как подчиненные. Все они работают на сервере 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

Есть предложения?

...