У меня есть приложение NodeMCU Lua, которое использует два таймера. Каждый таймер вызывает функцию, которая вызывает отправку HTTP-запроса на локальный сервер.
После нескольких итераций один из таймеров останавливается, а другой таймер продолжает работу. Количество итераций до остановки таймера кажется случайным. Я запускал тестовый сценарий много раз, и точка остановки таймера никогда не бывает одинаковой. Примечание: не всегда останавливается один и тот же таймер.
Вот тестовый код, который достоверно демонстрирует эту проблему:
ctr1=0
ctr2=0
local function doCmdChk()
ctr1 = ctr1 + 1
http.get( "http://192.168.2.38/ICmd.py?i=" .. ctr1 , nil,
function(rspCode, payload)
tmr.start(1)
end)
end
local function sendData()
ctr2 = ctr2 + 1
local msgBdy = '{"s":"' .. ctr2 .. '","i":"test23", "d":"heap='..node.heap()..'"}'
http.post("http://192.168.2.38/DeviceScan.py", "Content-Type: text/json\r\n", msgBdy,
function(rspCode, payload)
tmr.start(2)
end)
end
--mainline start:
tmr.alarm(1, 3000, tmr.ALARM_SEMI, doCmdChk)
tmr.alarm(2, 5000, tmr.ALARM_SEMI, sendData)
Мое приложение не запускает HTTP-запросы так же быстро, как тестовый код, но когда приложение работает в течение нескольких часов, в конечном итоге возникает тот же результат (т.е. один из таймеров перестает работать). Уменьшение времени между HTTP-запросами приводит к тому, что ошибка возникает раньше.
Кто-нибудь сталкивался с этой проблемой? Есть ли у кого-нибудь идеи, как решить эту проблему? (невозможность надежно отправлять непрерывные HTTP-запросы является препятствием для этого приложения).