Java Netty 4.0 ByteBuf retain()使用
我试图理解基于实现的解码aTrack协议,他们使用Netty实现他们的平台,但我不知道这是使用ByteBuf对象的保留方法。他们用这种方法:Java Netty 4.0 ByteBuf retain()使用,java,sockets,netty,Java,Sockets,Netty,我试图理解基于实现的解码aTrack协议,他们使用Netty实现他们的平台,但我不知道这是使用ByteBuf对象的保留方法。他们用这种方法: protected Object decode( Channel channel, SocketAddress remoteAddress, Object msg) throws Exception { ByteBuf buf = (ByteBuf) msg; if (buf.getUnsignedShort(buf.r
protected Object decode(
Channel channel, SocketAddress remoteAddress, Object msg) throws Exception {
ByteBuf buf = (ByteBuf) msg;
if (buf.getUnsignedShort(buf.readerIndex()) == 0xfe02) {
if (channel != null) {
channel.writeAndFlush(new NetworkMessage(buf.retain(), remoteAddress)); // keep-alive message
}
return null;
} else if (buf.getByte(buf.readerIndex()) == '$') {
return decodeInfo(channel, remoteAddress, buf.toString(StandardCharsets.US_ASCII).trim());
} else if (buf.getByte(buf.readerIndex() + 2) == ',') {
return decodeText(channel, remoteAddress, buf.toString(StandardCharsets.US_ASCII).trim());
} else {
return decodeBinary(channel, remoteAddress, buf);
}
}
有人能给我解释一下ByteBuf retain()方法是如何工作的吗?
谢谢。书中:
对于编码器和解码器,一旦消息被编码或解码,它将通过调用ReferenceCountUtil.release(message)
自动释放。如果需要保留引用以供以后使用,可以调用ReferenceCountUtil.retain(message)
。这会增加引用计数,从而防止消息被释放
关于什么是参考计数的进一步说明,这将有助于:
引用计数是一种优化内存使用和性能的技术
当一个对象不再被其他对象引用时,释放该对象所持有的资源。ReferenceCounted
实现实例通常以活动引用计数1开始。只要引用计数大于0,就保证不会释放对象。当活动引用的数量减少到0时,实例将被释放。请注意,已释放的对象应不再可供使用
书中:
对于编码器和解码器,一旦消息被编码或解码,它将通过调用ReferenceCountUtil.release(message)
自动释放。如果需要保留引用以供以后使用,可以调用ReferenceCountUtil.retain(message)
。这会增加引用计数,从而防止消息被释放
关于什么是参考计数的进一步说明,这将有助于:
引用计数是一种优化内存使用和性能的技术
当一个对象不再被其他对象引用时,释放该对象所持有的资源。ReferenceCounted
实现实例通常以活动引用计数1开始。只要引用计数大于0,就保证不会释放对象。当活动引用的数量减少到0时,实例将被释放。请注意,已释放的对象应不再可供使用
好的,很好,如果我理解的很好,那么它发送的信息与收到的信息相同?是的,并确保
buf
可以在以后无问题地重复使用。很好!!非常感谢@Riyafa,我会尝试在netty framework中实现我的问题,我读了你推荐给我的书中的一些内容,这听起来是解决网络性能问题的一个非常好的方法。好的,太好了,如果我理解得很好,它正在发送与接收到的消息相同的消息作为应答?是,并确保buf
可以在以后无问题地重复使用。太好了!!非常感谢@Riyafa,我会尝试在netty框架中实现我的问题,我读了你推荐给我的书中的一些内容,这听起来是解决网络性能问题的一个非常好的方法。