Web请求事件驱动的Lua代码

我在我的ESP8266WiFi模块上运行的Lua脚本中看到并实现的是每隔几秒轮询服务器页面,然后检查值是否已更改。如果值已更改,则执行某些操作。

这是我的代码

tmr.alarm(1,10000, 1, function()
    if (wifi.sta.getip() == nil) then
        print("IP不可用,请等待...")
    else
        tmr.stop(1)
        tmr.alarm(1,10000, 1, function()
            event_driven_func()
        end)
    end
end)

function event_driven_func()
    print("Inside event_driven_func function"..node.heap());
        conn = nil
        conn=net.createConnection(net.TCP,0)
        conn:on("receive", function(conn, payload)
            -- local buf = "";
            startRead = false
            Data = ""
            print("payload : "..payload)
            for i = 1, #payload do
                c = payload:sub(i,i)
                if (c=="{") then
                    startRead=true
                end
                if (startRead) then
                    Data=Data..c
                end
                if (c=="}") then
                    startRead=false
                    print("检测到JSON字符串 现在要做些什么...");
                end
            end
            conn:close()
            collectgarbage("collect");
        end)

        conn:connect(80,"my_server.co.in")
        conn:on("connection", function(conn, payload)
            conn:send("GET /xyz.php HTTP/1.0\r\nHost: my_server.co.in\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n")
        end)

end

但这非常低效。

如何实现或更好地使用伪代码,使事件驱动的代码在值更改时有中断,然后执行event_driven_func?

或者有更好的有效方法。

应用程序示例:

比如我在服务器页面上显示有许多youtube订阅者,每当订阅者更改时,它应该对我的一个JSON页面xyz.php进行"POST"网络请求(这将使用IFTTT完成),然后事件将执行Lua代码中的函数,以便该值将被反映。

点赞