Estoy aprendiendo a usar Netty (la herramienta es totalmente nueva). Estudié el ejemplo del servidor HTTP que se da en la documentación de Netty. Pero no entiendo qué es DecoderResult y cómo se usa en el ejemplo.

Lo que aprendí hasta ahora:
1. Los decodificadores sirven para convertir bytes en objetos más complejos. En este caso, bytes a HttpRequest.
2. En el último ChannelInboundHandler (después de completar toda la decodificación) recibo mi objeto (por ejemplo, HttpRequest).
3. La implementación del método channelRead0 de HttpSnoopServerHandler es bastante claro: obtén el objeto, descúbrelo, extrae información, crea la respuesta y escríbela cuando esté lista.

Lo que no entiendo es por qué se comprueba el resultado de la decodificación (es decir, appendDecoderResult) después de leer algunas cosas del objeto HttpRequest. ¿No debería verificar tal falla antes de tocar msg? De manera más general, ¿qué sucede cuando falla la decodificación?

Para que conste, aquí está la parte del código que estoy confundido:

@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);
    }
}
0
Rad 25 sep. 2019 a las 10:57

1 respuesta

La mejor respuesta

En realidad, es el decodificador HTTP, lo que significa que lee los datos e intenta decodificarlos en una solicitud HTTP. Al hacer esto, puede encontrar algunos problemas que pueden hacer que el proceso de decodificación falle. No obstante, se pueden utilizar los datos ya decodificados. Entonces supongo que el orden no importa.

0
Rad 2 oct. 2019 a las 10:49