Netty是HTTP解析器可重用的以及如何

  • 本文关键字:HTTP Netty netty
  • 更新时间 :
  • 英文 :


我需要可重用的异步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.

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

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

谢谢院长

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

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

最新更新