0

我需要可重用的异步 http 解析代码。netty 是否可能仅包含一些用于解析部分的 api?(我一直相信解析器应该是独立的和可重用的,而不是与框架绑定的,所以我希望 netty 的也是可重用的)。

IE。像这样输入字节会很棒,如果还没有足够的字节,它会返回 null

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.

或者也许我可以以不同的方式重用代码。我所知道的是我得到的字节并不总是有所有的 http 标头,因为它是异步的东西。有什么办法解析东西吗?

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

谢谢,院长

4

2 回答 2

2

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

于 2012-12-12T09:17:49.940 回答
0

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

于 2018-10-16T22:42:57.720 回答