netty是http解析器可重用的吗?如何重用?

netty是http解析器可重用的吗?如何重用?,netty,Netty,我需要可重用的异步http解析代码。netty是否只包含一些用于解析部分的api?(我一直认为解析器应该是独立的、可重用的,并且不与框架绑定,所以我希望netty的解析器也可以重用) 这将是伟大的饲料在字节这样,如果它返回空 还没有足够的字节 private byte[] previousData; byte[] data = incomingMergedWithPrevious(previousData); HttpResponse resp = httpResponseParser.par

我需要可重用的异步http解析代码。netty是否只包含一些用于解析部分的api?(我一直认为解析器应该是独立的、可重用的,并且不与框架绑定,所以我希望netty的解析器也可以重用)

这将是伟大的饲料在字节这样,如果它返回空 还没有足够的字节

private byte[] previousData;

byte[] data = incomingMergedWithPrevious(previousData);
HttpResponse resp = httpResponseParser.parse(data);
if(resp == null) {
    return; //we do not have full data to parse yet
}

//otherwise fire the response to someone else.
或者我可以用另一种方式重新使用代码。我只知道我得到了 字节,因为它是 异步的东西。有什么方法可以解析东西吗

注意:另外,我想进行分块,所以我不确定每次都应该返回HttpResponse,但可能是一个列表,其中一个子类是HttpHeaders,另一个子类是HttpChunk

谢谢,
Dean

您可以将。DecodeRembeder页面上有一个示例。听起来您想使用pollAll方法。如果希望以不同的方式处理HttpResponse和HttpChunk消息,则需要检查每个返回对象的类型。

在4.1.x系列中,实现这一点的方法是通过
EmbeddedChannel
类。向它添加一组处理程序,然后使用包含原始http字节的
ByteBuf
s调用
writeInboundXXX
方法。例如,解析一个请求
new EmbeddedChannel(new HttpRequestDecoder,new MyHandler)
将导致处理程序接收解码的
HttpObjects

太糟糕了,他们一开始没有让它更像一个组件,所以他们自己的测试不必创建一个特殊的类来测试它:(但非常感谢您的回答。这应该不是问题。您只需要按正确的顺序将HttpContentDecompressor添加到处理程序列表中。因此,该列表是HttpMessageDecoder,HttpContentDecompressor。调用pollAll应返回完全解析和解压缩的HTTP消息或chunk。ewwww,netty正在抛出运行时ReplayExc。)对半个数据包进入的正常行为的理解……这不是很有效。(他们真的应该像play那样做,这样就不会填入那个家伙的堆栈跟踪).Nah,我想避免把所有的netty类都带进来。我最终在webpieces中编写了自己的http1.1和http2解析器。然后我编写了一个对http一无所知的nio层,最后是一个http客户机,它重新使用解析器+nio层将其连接在一起,这样每个都是一个组合的部分,更易于重用,更不用说更易于维护/te了圣。