Java Netty ChannelHandler-如何在channelRead0中获取DefaultFullHttpResponse?
我正在尝试设置请求/响应客户端ChannelHandler。此时,我能够在我的Java Netty ChannelHandler-如何在channelRead0中获取DefaultFullHttpResponse?,java,netty,nio,Java,Netty,Nio,我正在尝试设置请求/响应客户端ChannelHandler。此时,我能够在我的channelRead0方法中获得DefaultHttpResponse,但我不知道如何获得DefaultFullHttpResponse 我需要DefaultFullHttpResponse的原因是DefaultHttpResponse似乎不包含从服务器返回的响应正文 我的通灵者- public class NettyClientHandler extends SimpleChannelInboundHandler&
channelRead0
方法中获得DefaultHttpResponse,但我不知道如何获得DefaultFullHttpResponse
我需要DefaultFullHttpResponse的原因是DefaultHttpResponse似乎不包含从服务器返回的响应正文
我的通灵者-
public class NettyClientHandler extends SimpleChannelInboundHandler<DefaultHttpResponse> {
private ChannelHandlerContext ctx;
private BlockingQueue<Promise<DefaultHttpResponse>> messageList = new LinkedBlockingQueue<>(1_000_000);
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
super.channelActive(ctx);
this.ctx = ctx;
}
@Override
public void channelRead0(ChannelHandlerContext ctx, DefaultHttpResponse msg) {
synchronized (this) {
messageList.poll().setSuccess(msg);
System.out.println(msg);
}
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
cause.printStackTrace();
ctx.close();
}
@Override
public void channelReadComplete(ChannelHandlerContext ctx)
throws Exception {
super.channelReadComplete(ctx);
System.out.println("channelReadComplete");
}
}
我环顾四周,但找不到任何FullHttpClientCodec
或HttpClientCodec
中允许我这样做的选项
如何将DefaultFullHttpResponse传递给channelRead0方法?解决了这个问题。需要在
HttpClientCodec
之后将新的HttpObjectAggregator(4096)添加到我的管道中。然后我的ChannelClientHandler类型需要从DefaultHttpResponse
更改为FullHttpResponse
。需要在HttpClientCodec
之后将新的HttpObjectAggregator(4096)添加到我的管道中。然后我的ChannelClientHandler类型需要从DefaultHttpResponse
更改为FullHttpResponse
@Override
public void channelCreated(Channel channel) throws Exception {
channel.pipeline().addLast(sslContext.newHandler(channel.alloc()));
channel.pipeline().addLast(new HttpClientCodec());
channel.pipeline().addLast(new HttpContentDecompressor());
channel.pipeline().addLast(new NettyClientHandler());
}