首页 > 解决方案 > 什么是 Netty DecoderResult 以及如何使用它?

问题描述

我正在学习如何使用 Netty(这个工具是全新的)。我研究了 Netty 文档中给出的 HTTP 服务器示例。但我不明白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);
    }
}

标签: netty

解决方案


它实际上是 HTTP 解码器,这意味着它读取数据并尝试将其解码为 HTTP 请求。这样做时可能会遇到一些问题,这些问题可能会导致解码过程失败。至少可以使用已经解码的数据。所以我想顺序无关紧要。


推荐阅读