Я учусь использовать Netty (поэтому совершенно новый инструмент).Я изучил пример HTTP-сервера, приведенный в документации Netty.Но я не понимаю, что такое DecoderResult
и как оно используется в примере.
Что я узнал до сих пор:
1. Декодеры должны преобразовывать байты в более сложные объекты.В этом случае байты равны HttpRequest
.
2. В последнем ChannelInboundHandler
(после завершения декодирования) я получаю свой объект (например, HttpRequest
).
3. Реализация метода channelRead0
из HttpSnoopServerHandler
совершенно ясно: получить объект, бросить, извлечь информацию, построить ответ, и написать его, когда он будет готов.
Чего я не понимаю, так это почему проверка результата декодирования (т. Е. appendDecoderResult
) выполняется после чтения некоторого материала из объекта HttpRequest
?Не должен ли я проверить такой сбой перед тем, как дотронуться до msg
.В более общем плане, что происходит при сбое декодирования?
Для сведения, вот часть кода, которую я запутал:
@Override
protected void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
if (msg instanceof HttpRequest) {
val request = (HttpRequest) msg;
// read all sort of stuff from request
// and add them to the response buffer;
// This is the line confused me :/
appendDecoderResult(buf, request);
}
}