NodeMCU HTTP 服务器响应长度限制
NodeMCU HTTP server response length limit
我正在 运行我的 NodeMCU 上安装一个 TCP HTTP 服务器。我正在提供文件,例如 HTML、CSS 和 JavaScript。这很好,直到代码开始变长。
发生的情况是响应刚刚被切断。它发生在大约 1024 个字符处(这似乎是一个神奇的数字)。
一种解决方案是将文件托管在服务器上,例如 Google Drive、Dropbox 或 Github。但是,无法访问互联网,因为服务器正在 运行 通过 NodeMCU 创建的热点。
有什么方法可以超越这个限制?
ESP 无法跨多个 IP 数据包传输数据,这就是它在 1024 个字符后被裁剪的原因。
下面是我如何在我的 ESP 运行 NodeMCU 上提供更大的文件:
responseQueue = {}
function processQueue(socket)
if #responseQueue > 0 then
socket:send( table.remove(responseQueue, 1) )
else
socket:close()
collectgarbage()
end
end
function sendFile(conn, filename)
if file.open(filename, "r") then
table.insert(responseQueue, 'HTTP/1.1 200 OK\r\n')
table.insert(responseQueue, 'Content-Type: text/html\r\n\r\n')
local lastPos = 0
repeat
file.seek("set", lastPos)
local line = file.read(512)
file.close()
if line then
table.insert(responseQueue, line)
lastPos = lastPos + 512
else
lastPos = nil
end
until(line == nil)
end
processQueue(conn)
end
旁注: @TerryE here 给出的原始答案将我指向上面发布的实现。
我正在 运行我的 NodeMCU 上安装一个 TCP HTTP 服务器。我正在提供文件,例如 HTML、CSS 和 JavaScript。这很好,直到代码开始变长。
发生的情况是响应刚刚被切断。它发生在大约 1024 个字符处(这似乎是一个神奇的数字)。
一种解决方案是将文件托管在服务器上,例如 Google Drive、Dropbox 或 Github。但是,无法访问互联网,因为服务器正在 运行 通过 NodeMCU 创建的热点。
有什么方法可以超越这个限制?
ESP 无法跨多个 IP 数据包传输数据,这就是它在 1024 个字符后被裁剪的原因。
下面是我如何在我的 ESP 运行 NodeMCU 上提供更大的文件:
responseQueue = {}
function processQueue(socket)
if #responseQueue > 0 then
socket:send( table.remove(responseQueue, 1) )
else
socket:close()
collectgarbage()
end
end
function sendFile(conn, filename)
if file.open(filename, "r") then
table.insert(responseQueue, 'HTTP/1.1 200 OK\r\n')
table.insert(responseQueue, 'Content-Type: text/html\r\n\r\n')
local lastPos = 0
repeat
file.seek("set", lastPos)
local line = file.read(512)
file.close()
if line then
table.insert(responseQueue, line)
lastPos = lastPos + 512
else
lastPos = nil
end
until(line == nil)
end
processQueue(conn)
end
旁注: @TerryE here 给出的原始答案将我指向上面发布的实现。