0

我有一个带有扩展 ReplayingDecoder 的 HTTP 消息解码器的 Netty 3 代码库,我需要迁移分析消息块的代码,这意味着我需要获取这些块。

protected Object decode(ChannelHandlerContext ctx, Channel channel, 
                        ByteBuf buffer, State state) {

    //...

    HttpChunk chunk = new DefaultHttpChunk(buffer.readBytes(toRead));

    //...

}

根据我收集到的信息,我需要改用 HttpChunkedInput,但创建一个非常困难。

                                           //requires an InputStream...
HttpChunkedInput hc = new HttpChunkedInput(new ChunkedStream(...));

//but this seems really clunky/too awkward to be right.
HttpChunkedInput hc = new HttpChunkedInput(new ChunkedStream(new ByteArrayInputStream(buffer.array()));

ByteBuf 似乎没有办法直接转储流。我是否缺少更好的 Util 类 API?我确实发现有一个新的EmbeddedChannel类,它可以像这里一样简单地 readInbound() ,但我不确定我是否应该为此更改类型或将裸 Channel 转换为 EmbeddedChannel 以摆脱问题。

4

1 回答 1

1

Netty 4.x 及更高版本带有一个开箱即用的 HTTP 编解码器,除非您使用 HTTP 聚合处理程序,否则它将为您提供 HTTP 块作为HttpContent对象。

此示例显示如何编写接收此类块的处理程序:

https://github.com/netty/netty/blob/a329857ec20cc1b93ceead6307c6849f93b3f101/example/src/main/java/io/netty/example/http/snoop/HttpSnoopServerHandler.java#L60

于 2021-09-07T20:15:57.010 回答