gpt4 book ai didi

java - Netty:如何重用相同的 `FullHttpResponse` ?

转载 作者:可可西里 更新时间:2023-11-01 17:00:45 29 4
gpt4 key购买 nike

在我的项目中,我想写同样的 FullHttpResponse对许多客户来说是为了提高性能。

以前我也写过同样的ByteBuf对于自定义协议(protocol),并使用了 retain防止写入后释放buf。

不幸的是 FullHttpResponse ( DefaultFullHttpResponse ) 我的技术似乎不起作用。我第一次写入响应时,客户端正确接收到响应,但下一次写入没有通过。

我做了一个简单的 System.out.println测试以确保没有任何阻塞并且我的代码已完全执行,我的测试表明是的,没有任何阻塞并且请求似乎确实通过了。

我正在使用 Netty 4.1.0.Final从 Maven Central 发布。


管道只有一个 HttpServerCodec(256, 512, 512, false, 64)和我的 SimpleChannelInboundHandler<HttpRequest> ,我发送 FullHttpResponse来自。

这是我的入站处理程序的简化版本:

class HTTPHandler extends SimpleChannelInboundHandler<HttpRequest> {

private static final FullHttpResponse response =
new DefaultFullHttpResponse(HttpVersion.HTTP_1_1,
HttpResponseStatus.OK,
Unpooled.buffer(8).writeLong(0),
false);

@Override
public void channelRead0(ChannelHandlerContext ctx, HttpRequest msg) {
ctx.writeAndFlush(response.retain(), ctx.voidPromise());
}

}

最佳答案

你需要使用 response.duplicate().retain() 或者如果使用 Netty 4.1.x 你也可以使用 response.retainedDuplicate()

这是确保您获得单独的读者/作者索引所必需的。

关于java - Netty:如何重用相同的 `FullHttpResponse` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37625864/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com