作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想计算HttpDecompressor之前的压缩大小。
我尝试调用connection.addHandlerFirst
,但不起作用。
HttpClient.create()
.mapConnect((connection, bootstrap) -> connection.map(
conn -> {
conn.addHandlerFirst(new ChannelInboundHandlerAdapter() {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
if (msg instanceof HttpContent) {
System.out.println("received:" + msg);
}
super.channelRead(ctx, msg);
}
});
return conn;
}
))
.compress(true);
最佳答案
使用Connection#addHandlerFirst
不会有帮助,因为处理程序将在 react 器编解码器之后添加。 More information here
您可以将此处理程序直接添加到 Netty 管道,如下所示:
HttpClient.create()
.mapConnect((connection, bootstrap) -> connection.map(
conn -> {
conn.channel().pipeline().addBefore(NettyPipeline.HttpDecompressor, "myhandler",new ChannelInboundHandlerAdapter() {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
if (msg instanceof HttpContent) {
System.out.println("received:" + msg);
}
super.channelRead(ctx, msg);
}
});
return conn;
}
))
.compress(true);
但是您应该记住,一旦将其直接添加到管道中,如果您使用连接池,则该处理程序也将保留用于下一个请求(Connection#addHandlerFirst
的情况并非如此)。因此,如果您仅需要针对特定请求,那么您应该在收到响应后将其删除。像这样的事情:
HttpClient.create()
.doOnResponse((res, conn) ->
conn.channel().pipeline().addBefore(NettyPipeline.HttpDecompressor, "myhandler",new ChannelInboundHandlerAdapter() {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
if (msg instanceof HttpContent) {
System.out.println("received:" + msg);
}
super.channelRead(ctx, msg);
}
}))
.doAfterResponse((res, conn) ->
conn.channel().pipeline().remove("myhandler"))
.compress(true)
关于java - 如何在 HttpDecompressor 之前添加 GlobalTrafficShapingHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57885043/
我想计算HttpDecompressor之前的压缩大小。 我尝试调用connection.addHandlerFirst,但不起作用。 HttpClient.create() .mapConn
我是一名优秀的程序员,十分优秀!