【发布时间】:2016-07-29 16:10:26
【问题描述】:
我正在尝试使用 Netty 4.1 编写高性能反向代理服务器。 我的代码基于Feng-Zihao/protox 和Netty Proxy Example 的Java 改编。
我最初在处理 100-CONTINUE 时遇到了一些麻烦,但将 HttpObjectAggregator 添加到我的管道中解决了这个问题。
serverBootstrap
.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.handler(new LoggingHandler(LogLevel.DEBUG))
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) throws Exception {
ch.pipeline().addLast(new LoggingHandler(LogLevel.DEBUG));
ch.pipeline().addLast(new HttpRequestDecoder());
ch.pipeline().addLast(new HttpResponseEncoder());
ch.pipeline().addLast(new HttpObjectAggregator(1048576));
ch.pipeline().addLast(new FrontendHandler());
}
})
// .option(ChannelOption.SO_REUSEADDR, true)
// .option(ChannelOption.SO_BACKLOG, 128)
// .childOption(ChannelOption.SO_KEEPALIVE, true)
.childOption(ChannelOption.AUTO_READ, false)
.bind(port).sync();
在客户端,请求无限期挂起。
问题是,位于false 的AUTO_READ 似乎阻止了HttpObjectAggregator 完成他的工作,而我的FrontendHandler 只收到channelActive 事件,但从来没有收到channelRead。
seems though 我需要它来确保我不会在读取和远程对等连接之间陷入某种竞争状态。
仅供参考,我的最终目标是根据需要读取完整 http 内容的过滤器(可能是我的 FrontendHandler 之前的新处理程序)选择转发或不转发请求。
我在这里错过了什么吗?
【问题讨论】:
标签: java proxy netty reverse-proxy