我有一个使用两个计时器的 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 请求是这个应用程序的一个障碍)。