Я тестирую небольшой веб-сервер Lua с функцией автоматического обновления. Код HTML перенаправляется на сам веб-сервер каждую секунду. Таким образом, веб-браузер клиента всегда получает новые данные с сервера, а не использует кеш браузера.
Если я подключаюсь даже только к одному клиенту (моему ПК или смартфону), через некоторое время плата NodeMCU вылетает с этим сообщением:
ПАНИКА: незащищенная ошибка при вызове Lua API (SO-WebSrv-Test.lua:27: нехватка памяти)
Я использовал этот код от Марселя Стоера, который ответил на подобное «нехватка памяти» вопрос.
Я модифицировал код Марселя на Lua, но этот код со временем по-прежнему занимает всю память кучи.
Я немного сузил проблему: если частота обновления HTML-кода ниже 30 секунд, код съедает кучу памяти.
Итак, как мне изменить этот код, чтобы обеспечить постоянное использование памяти кучи?
С наилучшими пожеланиями.
Стефан
tmr.alarm(0, 1000, 1, function()
if wifi.sta.getip() == nil then
print("trying to connect to AccessPoint...")
else
own_ip, netmask, gateway=wifi.sta.getip()
print("connected to AccessPoint:")
print("IP Info: \nIP Address of this device: ",own_ip)
print("Netmask: ",netmask)
print("Gateway Addr: ",gateway,"\n")
print("type IP-Address "..own_ip.." into your browser to display SHT-31-website")
tmr.stop(0)
end
end)
counter = 0
srv = net.createServer(net.TCP, 28800)
print("Server created... \n")
srv:listen(80, function(conn)
conn:on("receive", function(sck, request)
local message = {}
counter = counter + 1
message[#message + 1] = "<head> <meta http-equiv=refresh content=1; URL=http://"..own_ip.."> </head>"
message[#message + 1] = "<h1> ESP8266 SHT-31 Web Server Ver 003</h1>"
message[#message + 1] = "<h2>some more text blabla blub"..counter.."</h2>"
local function send(sk)
if #message > 0 then
sk:send(table.remove(message, 1))
else
sk:close()
message = nil
print("Heap Available:" .. node.heap())
end
end
sck:on("sent", send)
send(sck)
end)
end)