POST-запросы по топологии "звезда"? - PullRequest
0 голосов
/ 10 апреля 2019

Я использую разные esp8266 для получения запросов POST от сервера Nodejs.Nodejs сохраняет данные в MySQL db и отправляет команды esp8266s.Я использую приложение ac # для изменения команд для конкретного esp8266, они анализируют полученный json и игнорируют команду, если она не для них.В любом случае, моя проблема в том, что мне нужно, чтобы каждый esp8266 получал одну и ту же команду POST один раз, а затем «очищал» ответ или вообще прекращал посылать какую-либо команду.Короче говоря, мне нужно «сказать то же самое каждому из них».Я не уверен, объяснил ли я сам, но оставлю некоторые подробности о том, как я реализовал:

-> esp8266s отправляет POST-запросы на сервер Nodejs каждые X секунд и возвращает ответ с json, чтосодержит идентификатор для каждого esp8266, поэтому я читаю полезную нагрузку и игнорирую все, если идентификатор не совпадает

-> Я очищаю ответ на сервере после отправки, чтобы избежать многократной отправки.

-> Если второй esp8266 запрашивает после очистки ответа, он не получит команду.

-> Я использую экспресс-пакет для Nodejs (не уверен, что это лучший вариант)

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

if (strArray[3] == "agv") { //request received by esp8266 device
    res.send(agvResponse);
    resetJSON(agvResponse);
} else if (strArray[3] == "manager") { //request received by c# app

    agvResponse["agvnumber"] = strArray[7];

    if (strArray[11] == "STOP") {
        cmd = "STOP";
        agvResponse["command"] = cmd;
        res.end();
    } else if (strArray[11] == "START") {
        cmd = "START";
        agvResponse["command"] = cmd;
        res.end();
    } else if (strArray[11] == "NEW_DESTINATION") {
        cmd = "NEW_DESTINATION";
        agvResponse["command"] = cmd;
        agvResponse["destination"] = strArray[15];
        res.end();
    }
}
...