Что такое Netty DecoderResult и как его использовать? - PullRequest
0 голосов
/ 25 сентября 2019

Я учусь использовать 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);
    }
}
...