netty - 什么是 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);
}
}
解决方案
它实际上是 HTTP 解码器,这意味着它读取数据并尝试将其解码为 HTTP 请求。这样做时可能会遇到一些问题,这些问题可能会导致解码过程失败。至少可以使用已经解码的数据。所以我想顺序无关紧要。
推荐阅读
- javascript - JavaScript ReferenceError:按钮未定义
- r - 对聚类树状图的调整
- javascript - 如何使用 Next.js 在每一侧添加组件?
- javascript - 获取一个变量内的数字总和
- node.js - 与 Windows Media Player 集成(当前播放歌曲)
- delphi - SSL 错误 1409442E 通过 HTTPS 使用 TIdHTTP 下载文件
- javascript - 将函数中的数组传递给字符串 JavaScript
- firebase-cloud-messaging - 在android中杀死应用程序时不会生成Firebase推送通知?
- c# - Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式
- javascript - 使用自定义 React 挂钩获取数据