Нужно ли закрывать Нетти Чункединпут?
Как указано в вопросе, необходимо ли закрывать Netty ChunkedInput
после отправки его данных через ChannelHandlerContext.writeAndFlush()
? Я знаю, что эта операция асинхронна, поэтому, вероятно, я не должен закрывать ее сразу после вызова writeAndFlush()
, поэтому мне нужно добавить FutureListener
, чтобы закрыть ее?
В официальном файловый сервер например, я считаю, что функция close()
функции ChunkedInput
не называется:
sendFileFuture = ctx.writeAndFlush(new HttpChunkedInput(new ChunkedFile(raf, 0, fileLength, 8192)), ctx.newProgressivePromise());
Означает ли это, что ChunkedInput
закрывается автоматически, когда все данные читается, или канал действительно помогает мне закрыть его?
1 ответ:
Да, вам почти никогда не нужно закрывать
ChunkedInput
самостоятельно, так как у вас обычно естьChunkedWriteHandler
в конвейере, который закроет его для вас после того, как будет записан последний кусок. Смотритекод .Означает ли это, что ChunkedInput закрывается автоматически, когда все данные считываются
Давно была ошибка, которая закрывала вход после того, как данные были прочитаны, но она была исправлена, чтобы закрыть вход после записи последнего фрагмента. Видеть https://github.com/netty/netty/commit/fb52b8a3b2e3940a0bcf6e9167b157d59a811691
В Примере, на который вы ссылаетесь, конвейер включает в себя
ChunkedWriteHandler
иChunkedFile
(реализацияChunkedFile
) закрывается автоматически.