esp8266 WiFiServer:我必须读取所有传入的数据吗?

时间:2018-06-19 18:36:47

标签: http esp8266 arduino-esp8266

我正在尝试制作一个HTTP服务器,使我可以从基于ESP8266的项目中远程收集度量。

在当前状态下,一切正常,但是我发现HTTP请求的处理过程中存在一个巨大的瓶颈:标头读取。

这是我的代码

String headers = "";
String request = "";
int iterationCount = 0;
unsigned long beginTime = millis();
delay(_CLIENT_DELAY);

unsigned long t1 = millis();
while (client.available())
{
  delay(1);
  if (request == "")
  {
    request = client.readStringUntil('\r');
    headers = request;
  }
  else
    headers += client.readStringUntil('\r');
}

如果我跟踪HTTP交换时间,则会发现读取标头(此处编写的代码)的部分通常需要5s而不是5.2s。问题是,对我来说唯一重要的是第一行:所请求的URL。

因此,我决定只通过在break的末尾添加一个if (request == "")语句来阅读此行(这很脏,但这只是一个测试)。

问题是,当我尝试在Chrome或Firefox中加载页面时(或者,当我在其上使用Android Volley StringRequest时,这更成问题了) ),我将在浏览器中收到一个Connection reset错误(或者在Volley中是一个Unexpected Response Code 200

为什么?我应该能够在不必读取每个传入字节的情况下写入“输出流”,不是吗?我这是怎么了?

请提出建议。

0 个答案:

没有答案