Java 向TCP Netty ChannelGroup中除一个以外的所有人写入
我有一个基于TCP的Netty应用程序,它有多个需要相互通信的客户端。我将所有通道引用存储在通道组中 虽然我知道我可以通过调用ChannelGroup.write向ChannelGroup中的每个客户机进行写入,但除了其中一个以外,向所有通道进行写入的有效方式是什么,例如: ‘A’、‘B’、‘C’都在一个频道组中,而‘A’需要发送到‘B’和‘C’、‘B’需要发送到‘A’和‘C’等。这样做的最佳方式是什么?以下是我想到的一些选择,但请提供一些反馈:Java 向TCP Netty ChannelGroup中除一个以外的所有人写入,java,tcp,netty,multicast,Java,Tcp,Netty,Multicast,我有一个基于TCP的Netty应用程序,它有多个需要相互通信的客户端。我将所有通道引用存储在通道组中 虽然我知道我可以通过调用ChannelGroup.write向ChannelGroup中的每个客户机进行写入,但除了其中一个以外,向所有通道进行写入的有效方式是什么,例如: ‘A’、‘B’、‘C’都在一个频道组中,而‘A’需要发送到‘B’和‘C’、‘B’需要发送到‘A’和‘C’等。这样做的最佳方式是什么?以下是我想到的一些选择,但请提供一些反馈: 只需遍历组并分别写入通道(在本例中不使用Chan
public ChannelGroupFuture write(Object message) {
Map<Integer, ChannelFuture> futures =
new LinkedHashMap<Integer, ChannelFuture>(size());
if (message instanceof ChannelBuffer) {
ChannelBuffer buf = (ChannelBuffer) message;
for (Channel c: nonServerChannels.values()) {
futures.put(c.getId(), c.write(buf.duplicate()));
}
} else {
for (Channel c: nonServerChannels.values()) {
futures.put(c.getId(), c.write(message));
}
}
return new DefaultChannelGroupFuture(this, futures);
}
公共信道组未来写入(对象消息){
地图期货=
新LinkedHashMap(size());
if(ChannelBuffer的消息实例){
ChannelBuffer buf=(ChannelBuffer)消息;
对于(通道c:nonServerChannels.values()){
futures.put(c.getId(),c.write(buf.duplicate());
}
}否则{
对于(通道c:nonServerChannels.values()){
futures.put(c.getId(),c.write(message));
}
}
返回新的DefaultChannelGroupFuture(本,futures);
}
。。。。尽管您确实从多路复用的未来中获益,但如果您关心完成回调,这是很有用的
我也不会做#3,因为您只是给下游处理程序更多的工作要做,丢弃了您费心编写的数据
因此,我会:
我可能会按照选项3做一些事情。如果您真的不希望通道向自己写入,那么在忽略消息本身的通道(或处理程序?)内设置逻辑是有意义的。这样,它就可以由通道来决定是否需要来自自身的消息。这样做可能会有其他的影响,但在其他方面它看起来是干净的。非常感谢您的帮助和分析。非常感谢。