是否有必要关闭Netty ChunkedInput?

时间:2018-03-14 13:15:14

标签: java netty nio channel

如问题中所述,是否有必要在通过ChunkedInput发送数据后关闭Netty ChannelHandlerContext.writeAndFlush()?我知道这个操作是异步的,所以我可能不应该在调用writeAndFlush()后立即关闭它,因此我是否需要添加FutureListener来关闭它?

在官方File server示例中,我认为close()的{​​{1}}函数未被调用:

ChunkedInput

是否意味着在读取所有数据时自动关闭sendFileFuture = ctx.writeAndFlush(new HttpChunkedInput(new ChunkedFile(raf, 0, fileLength, 8192)), ctx.newProgressivePromise()); ,或者该频道实际上是否帮我关闭了它?

1 个答案:

答案 0 :(得分:1)

是的,你几乎不需要自己关闭ChunkedInput,因为你通常会在管道中有一个ChunkedWriteHandler,它会在写完最后一个块之后为你关闭它。请参阅code

  

是否意味着在读取所有数据时自动关闭ChunkedInput

在读取数据后,有一个很长的错误关闭了输入,但是在写完最后一个块之后,它已被修复以关闭输入。见https://github.com/netty/netty/commit/fb52b8a3b2e3940a0bcf6e9167b157d59a811691

在您引用的示例中,管道包含ChunkedWriteHandlerChunkedFileChunkedFile的实施)会自动关闭。