Нужно ли закрывать Нетти Чункединпут?


Как указано в вопросе, необходимо ли закрывать Netty ChunkedInput после отправки его данных через ChannelHandlerContext.writeAndFlush()? Я знаю, что эта операция асинхронна, поэтому, вероятно, я не должен закрывать ее сразу после вызова writeAndFlush(), поэтому мне нужно добавить FutureListener, чтобы закрыть ее?

В официальном файловый сервер например, я считаю, что функция close() функции ChunkedInput не называется:

sendFileFuture = ctx.writeAndFlush(new HttpChunkedInput(new ChunkedFile(raf, 0, fileLength, 8192)), ctx.newProgressivePromise());

Означает ли это, что ChunkedInput закрывается автоматически, когда все данные читается, или канал действительно помогает мне закрыть его?

1 2

1 ответ:

Да, вам почти никогда не нужно закрывать ChunkedInput самостоятельно, так как у вас обычно есть ChunkedWriteHandler в конвейере, который закроет его для вас после того, как будет записан последний кусок. Смотритекод .

Означает ли это, что ChunkedInput закрывается автоматически, когда все данные считываются

Давно была ошибка, которая закрывала вход после того, как данные были прочитаны, но она была исправлена, чтобы закрыть вход после записи последнего фрагмента. Видеть https://github.com/netty/netty/commit/fb52b8a3b2e3940a0bcf6e9167b157d59a811691

В Примере, на который вы ссылаетесь, конвейер включает в себя ChunkedWriteHandler и ChunkedFile (реализация ChunkedFile) закрывается автоматически.