什么是 Netty DecoderResult 以及如何使用它?
What Is Netty DecoderResult and How to Use It?
我正在学习如何使用 Netty(这个工具是全新的)。我研究了 Netty 文档中给出的 HTTP 服务器示例。但是我不明白 DecoderResult
是什么以及它在示例中的使用方式。
到目前为止我学到了什么:
1.解码器是将字节转换为更复杂的对象。在这种情况下字节为 HttpRequest
.
2.在最后ChannelInboundHandler
(所有解码完成后)我收到我的对象(例如HttpRequest
)。
3.HttpSnoopServerHandler
的channelRead0
方法的实现很清楚:获取对象,向下转换,提取信息,构建响应,准备好后写入。
我不明白的是为什么检查解码结果(即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);
}
}
它实际上是 HTTP 解码器,这意味着它读取数据并尝试将其解码为 HTTP 请求。这样做时可能会遇到一些问题,这些问题可能会导致解码过程失败。尽管如此,还是可以使用已经解码的数据。所以我想顺序并不重要。
我正在学习如何使用 Netty(这个工具是全新的)。我研究了 Netty 文档中给出的 HTTP 服务器示例。但是我不明白 DecoderResult
是什么以及它在示例中的使用方式。
到目前为止我学到了什么:
1.解码器是将字节转换为更复杂的对象。在这种情况下字节为 HttpRequest
.
2.在最后ChannelInboundHandler
(所有解码完成后)我收到我的对象(例如HttpRequest
)。
3.HttpSnoopServerHandler
的channelRead0
方法的实现很清楚:获取对象,向下转换,提取信息,构建响应,准备好后写入。
我不明白的是为什么检查解码结果(即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);
}
}
它实际上是 HTTP 解码器,这意味着它读取数据并尝试将其解码为 HTTP 请求。这样做时可能会遇到一些问题,这些问题可能会导致解码过程失败。尽管如此,还是可以使用已经解码的数据。所以我想顺序并不重要。