如问题中所述,是否有必要在通过ChunkedInput
发送数据后关闭Netty ChannelHandlerContext.writeAndFlush()
?我知道这个操作是异步的,所以我可能不应该在调用writeAndFlush()
后立即关闭它,因此我是否需要添加FutureListener
来关闭它?
在官方File server示例中,我认为close()
的{{1}}函数未被调用:
ChunkedInput
是否意味着在读取所有数据时自动关闭sendFileFuture = ctx.writeAndFlush(new HttpChunkedInput(new ChunkedFile(raf, 0, fileLength, 8192)), ctx.newProgressivePromise());
,或者该频道实际上是否帮我关闭了它?
答案 0 :(得分:1)
是的,你几乎不需要自己关闭ChunkedInput
,因为你通常会在管道中有一个ChunkedWriteHandler
,它会在写完最后一个块之后为你关闭它。请参阅code。
是否意味着在读取所有数据时自动关闭ChunkedInput
在读取数据后,有一个很长的错误关闭了输入,但是在写完最后一个块之后,它已被修复以关闭输入。见https://github.com/netty/netty/commit/fb52b8a3b2e3940a0bcf6e9167b157d59a811691
在您引用的示例中,管道包含ChunkedWriteHandler
,ChunkedFile
(ChunkedFile
的实施)会自动关闭。