Netty:如何在管道外向所有(TCP)客户端发送消息

3
我正在将我使用JDK直接提供的包创建的“plain NIO”(非阻塞IO)TCP服务器迁移到Netty 4。
我有一些线程向所有客户端发送消息,例如健康检查数据包、聊天消息广播、向单个客户端发送直接聊天消息等,这些线程使用我在某处保留的SocketChannels集合来进行操作。
在Netty中该如何实现呢?是否明智地将一个ChannelGroup在Netty处理器和需要发送消息的线程之间进行共享?该通道将如下所示:
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(...);

那会起作用吗?

1个回答

6

是的,这将没有问题。ChannelGroup是为这样的任务而设计的。


它将从管道的哪里开始处理出站消息?总是从“末尾”(即第一个出站处理程序)还是...? - AndrewBourgeois
是的... 对于它们中的每一个,调用Channel.write都是相同的。 - Norman Maurer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接