2

我正在将我的“普通 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(...);

那行得通吗?

4

1 回答 1

5

是的,这将毫无问题地工作。ChannelGroup 是为这样的任务而设计的。

于 2013-05-25T12:25:21.983 回答