我正在尝试从 netty 的代码中创建一个原始的异步 http 解析器,删除所有 netty 依赖项,但我没有得到这段代码
private void skipControlCharacters(ByteBuffer buffer) {
for (;;) {
char c = (char) ByteBufferUtil.readUnsignedByte(buffer);
if (!Character.isISOControl(c) &&
!Character.isWhitespace(c)) {
buffer.position(buffer.position()-1);
break;
}
}
}
我有一个可以输入的测试
GET / HTT
然后喂
P/1.1\r\nHost: www.example.com\r\nConnection: close\r\n\r\n
自然,只有“GET / HTT”的第一个数据包会卡在循环中,直到我得到一个 BufferUnderflowException。在异步解析中,我们可能并不总是得到完整的数据包(这就是为什么 http 有 \r\n\r\n 以便我们可以知道何时我们有完整的 http 请求包)。还是只有在我进行一些准备时才能进行这种解析???这样我就必须自己缓存数据,直到收到 \r\n\r\n (我不喜欢其他层,但 http 解析器知道 http 解析,并且知道 \r\n\r\n 将是 http 特定的)。
谢谢,院长