我正在尝试制作一个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
。
为什么?我应该能够在不必读取每个传入字节的情况下写入“输出流”,不是吗?我这是怎么了?
请提出建议。