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 给出的原始答案将我指向上面发布的实现。