NodeMCU HTTP服务器响应长度限制

时间:2016-09-19 04:54:39

标签: http tcp lua arduino nodemcu

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

正在发生的事情是,响应刚刚被切断。它发生在大约1024个字符(似乎是神奇的数字)。

解决方案是将文件托管在服务器上,例如Google Drive,Dropbox或Github。但是,Internet访问不可用,因为服务器正在通过NodeMCU创建的热点运行。

是否可以覆盖此限制?

1 个答案:

答案 0 :(得分:1)

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 here给出的原始答案使我想到了上面发布的实现。