Netty 4.1.2.Final
我使用Unpooled.wrappedBuffer
方法包装多个ByteBuf
,API文档为here。
public static ByteBuf wrappedBuffer(ByteBuf... buffers)
医生说
所有变量的引用计数所有权都转移到此方法。
我更新了问题,以便更清楚。
我需要一次向多个连接发送多个ByteBuf
个。 我无法使用ChannelGroup
,因为某些客户端在长轮询模式下工作,这意味着必须在下一个请求中发送响应,此时此信道尚未就绪。
因此,我有以下数据结构存储连接的通道
private static final ConcurrentHashMap<String, Channel> channels
= new ConcurrentHashMap<String, Channel>();
我有一种方法将ByteBuf广播到频道
public static void broadcast(final long registrationID, final ByteBuf [] buffers){
final ByteBuf wrappedBuf = Unpooled.wrappedBuffer(buffers);
for( Map.Entry<String, Channel> entry : channels.entrySet()){
final Channel channel = entry.getValue();
if( channel != null ){
wrappedBuf.retain();
boolean isLongPooling = channel.attr(TYPE).get();
if( isLongPooling )
Reply.send( channel, wrappedBuf); // add into a queue which will be pulled by client in next request
else
channel.writeAndFlush(wrappedBuf); // real time client , send in current channel
}
}
wrappedBuf.release();
}
问题在于:如果我连接了多个实时客户端,那么即使所有客户端都已写入,它们中只有一个会收到响应。
这似乎是由引用计数引起的问题?
谢谢
答案 0 :(得分:1)
否......这意味着您需要在返回的缓冲区上调用release()。