NodeMCU HTTP服务器响应长度限制

我在我的NodeMCU上运行着一个TCP HTTP服务器。我正在提供HTML、CSS和JavaScript等文件。这很好,直到代码开始变长。

问题是,响应被截断了。它似乎是在大约1024个字符处截断的(似乎是魔法数字)。

一个解决方案是将文件托管在Google Drive、Dropbox或Github等服务器上。然而,因为服务器是通过NodeMCU创建的热点运行的,因此无法访问互联网。

有什么办法可以覆盖这个限制吗?

点赞
用户8171569
用户8171569

ESP无法在多个IP数据包之间流式传输数据,这就是它在1024个字符之后被裁剪的原因。

以下是我在运行NodeMCU的ESP上提供较大文件的方式:

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 在此处给出的答案指引我实现了上述发布的方法。

2018-08-02 13:42:03