从ESP8266服务器发送大量数据

时间:2019-07-28 14:58:17

标签: arduino-esp8266 embeddedwebserver

我正在从ESP8266建一个Web服务器,它将环境数据作为网页发送到任何Web客户端。我正在使用Arduino IDE。

问题在于数据有时可能会变得相当大,我可以找到的所有示例都展示了如何在内存中组装一个网页,然后通过ESP8266WebServer.send()将其全部一次发送给客户端。小型网页可以这样做,但无法处理我需要发送的数据量。

我想做的是发送网页的第一部分,然后在我收集数据时直接发送数据,然后发送网页的结尾部分。这有可能吗?我查找文档失败,并且似乎没有任何示例。

2 个答案:

答案 0 :(得分:0)

为便于将来参考,我想在此页面https://gist.github.com/spacehuhn/6c89594ad0edbdb0aad60541b72b2388

的帮助下找到了解决方法。

要点是仍然使用 ESP8266WebServer.send(),但是首先发送一个空字符串,并将Content-Length标头设置为数据大小,如下所示:< / p>

server.sendHeader("Content-Length", (String)fileSize);
server.send(200, "text/html", "");

然后您重复使用 ESP8266WebServer.sendContent()发送数据缓冲区,直到发送完所有数据为止。

希望这对其他人有帮助。

答案 1 :(得分:0)

Chunked transfer encoding 可能就是您想要的,它在您发送的网页是动态创建的并且太大而无法放入内存的情况下很有帮助。在这种情况下,您有两个问题。一,你不能一次全部发送,二,你不知道结果会有多大。这两个问题都可以这样解决:

String webPageChunk = "some html";
server.setContentLength(CONTENT_LENGTH_UNKNOWN);
server.send ( 200, "text/html", webPageChunk);
while (<page is being generated>) {
  webPageChunk = "some more html";
  server.sendContent(webPageChunk);
}
server.sendContent("");

发送一个空行会告诉客户端终止会话。在生成整个页面之前,请注意不要在循环中发送一个。

相关问题