В недавнем тесте моего ESP8266 я столкнулся с ограничением памяти.Как управлять большими строками
У меня есть простой HTTP-сервер, который служит json из AP, доступного вокруг ESP8266.
function incoming_connection(conn, payload)
conn:send('HTTP/1.1 200 OK\n')
conn:send('Content-Type: application/json\n\n')
conn:send(tableToJson1(currentAPs))
end
Когда я дома, в Париже, список AP может быть длинным, тогда я достигаю максимального размера полезной нагрузки.
Чтобы избежать этой паники памяти, я хочу разбить json на несколько кусков, а затем отправить один за другим.
Я написал:
function splitString(str, maxlen)
local t = {}
for i=1, math.ceil(string.len(str)/maxlen) do
t[i] = string.sub(str, (i-1)*maxlen+1, i*maxlen)
end
collectgarbage()
return t
end
Затем попытались проверить функцию с этим:
function genstr(len)
local s=""
for i=1,len do
s=s.."x"
end
return s
end
for k,v in pairs(splitString(genstr(2000))) do print(v) end
Результаты некоторых испытаний:
Length of generated string + Length of string chunks + Result
1500 + 100 + OK
1500 + 200 + OK
2000 + 100 + Crashes after 8 lines
2000 + 200 + Crashes after 4 lines
Кажется, что я достигаю память ограничить около 1500 байт.
Каким будет ваш совет преодолеть этот предел?
Заголовки в идеале должны заканчиваться на '\ r \ n', а не' \ n' – hjpotter92