我正在将我的“普通NIO”(=我直接使用JDK中的软件包)TCP服务器迁移到Netty 4。
我有线程向所有客户端发送消息,例如健康检查数据包,聊天消息广播,直接聊天消息到单个客户端,...使用我保留在某处的SocketChannels
集合。
我如何在Netty中做到这一点?简单地在一个Netty处理程序和需要发送消息的线程之间共享一个ChannelGroup是明智的吗?频道看起来像这样:
public class ChannelCollectorHandler extends ChannelInboundMessageHandlerAdapter<String> {
private static final ChannelGroup channels = new DefaultChannelGroup();
public SecureChatServerHandler(ChannelGroup channels) {
this.channels = channels;
}
@Override
public void channelActive(final ChannelHandlerContext ctx) throws Exception {
channels.add(ctx.channel());
}
...
}
在我将要做的所有线程中:
channels.write(...);
那会有用吗?
答案 0 :(得分:5)
是的,这将毫无问题地发挥作用。 ChannelGroup专为此类任务而设计。