如何解决关于警告的 Netty 新手问题:无法发布消息:PooledUnsafeDirectByteBuf(freed)
我正在通过 Netty In Action 书籍和代码示例学习 Netty,https://github.com/normanmaurer/netty-in-action/tree/2.0-SNAPSHOT/chapter2 中的第 2 章示例
我添加了另一个 AnotherEchoServerHandler
extends ChannelInboundHandlerAdapter
,在 AnotherEchoServerHandler.channelRead
方法中,我将其更新为:
public void channelRead(ChannelHandlerContext ctx,Object msg) {
ByteBuf in = (ByteBuf) msg;
System.out.println(
"Log from AnotherEchoServerHandler that Server received: " + in.toString(CharsetUtil.UTF_8));
ctx.fireChannelRead(msg);
ctx.write(in);
}
@Override
public void channelReadComplete(ChannelHandlerContext ctx)
throws Exception {
ctx.writeAndFlush(Unpooled.EMPTY_BUFFER)
.addListener(ChannelFutureListener.CLOSE);
}
在 EchoServer
中,我添加了新的 ChannelHandler
为:
ch.pipeline().addLast(new AnotherEchoServerHandler()).addLast(serverHandler);
与另一个 EchoServerHandler
一起,我现在有两个 ChannelHandler
,我想从每个 ChannelHandler
打印一条消息,并从每个 {{} 向 Client 写回一条消息1}}。
使用上述更改运行书籍示例:
在服务器端,它记录:
ChannelHandler
在客户端,它记录:
[INFO] --- exec-maven-plugin:1.2.1:java (default-cli) @ echo-server ---
nia.chapter2.echoserver.EchoServer started and listening for connections on /0:0:0:0:0:0:0:0:8888
Log from AnotherEchoServerHandler that Server received: Netty rocks!
Server received: Netty rocks!
正如你所看到的,我在双方都得到了预期的信息,但我也在服务器端看到了一个警告:
Client received: Netty rocks!Netty rocks!
这个警告消息是什么意思? 如何避免它?
解决方法
与其他 EchoServerHandler 一起,我现在有两个 ChannelHandler,我想从每个 ChannelHandler 打印一条消息,并从每个 ChannelHandler 向 Client 写回一条消息。
EchoServerHandler
也会写 msg
。这将导致 msg
在 ChannelOutboundBuffer
中被释放两次。
您可以在写入 EchoServerHandler
之前删除 in.retain()
或调用 AnotherEchoServerHandler
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。