java - Netty 将 HttpRequest 转换为 ByteBuf

标签 java netty

在我的应用程序中,我需要在套接字上接收一个字节数组,将其解析为 HttpRequest 以执行一些检查,如果检查通过,则返回字节数组并执行更多操作工作。

该应用程序基于 NETTY(这是一个要求)。

我的第一个想法是创建一个像这样的管道:

  1. HttpRequestDecoder(从 ByteBuf 解码为 HttpRequest)
  2. MyHttpRequestHandler(对 HttpRequest 进行我自己的检查)
  3. HttpRequestEncoder(将 HttpRequest 编码为 ByteBuf)
  4. MyButeBufHandler(使用 ByteBuf 进行工作)

但是,HttpRequestEncoder 扩展了 ChannelOutboundHandlerAdapter,因此不会为入站数据调用它。

我怎样才能完成这个任务? 最好避免对请求进行解码和重新编码。

问候, 马西米利亚诺

最佳答案

MyHttpRequestHandler 中使用 EmbeddedChannel

EmbeddedChannel ch = new EmbeddedChannel(new HttpRequestEncoder()); ch.writeOutbound(msg); ByteBuf 编码 = ch.readOutbound();

您必须将 EmbeddedChannel 保留为 MyHttpRequestEncoder 的成员变量,因为 HttpRequestEncoder 是有状态的。另外,请在使用完毕后关闭 EmbeddedChannel(可能在您的 channelInactive() 方法中。)

关于java - Netty 将 HttpRequest 转换为 ByteBuf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29230268/

相关文章:

java - maven - 两个模块可以使用同一库的不同版本

java - 没有为集成测试运行 testcontainers 的 Localstack 模块

java - 基本 Netty 演示无法同时处理 TCP 和 UDP 套接字

java - 在 Tomcat 中托管 Netty 服务器是否可行/可取?

spring-boot - 在 Spring-Boot 的嵌入式 Netty 中增加或移除内容长度限制

java - 如何从不同的 Java 代码执行 Runnable JAR 的 main 方法?

java - hadoop mapReduce项目下pom.xml的设置

java - 在 Android 应用程序中实现客户端 <-> 服务器 <-> 数据库架构的最佳方式?

performance - 在 32 核/10Gbit 主机上调优 Netty

java - GRPC Java 客户端和 NodeJS 服务器之间的 ssl 握手问题