【问题标题】:Netty: send messages to all (TCP) clients from outside the pipelineNetty:从管道外部向所有(TCP)客户端发送消息
【发布时间】:2013-05-20 16:04:01
【问题描述】:

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

这行得通吗?

【问题讨论】:

    标签: java netty


    【解决方案1】:

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

    【讨论】:

    • 它将从哪里开始处理管道上的出站消息?总是在“结束”(所以是第一个出站处理程序)还是...?
    • 是的......这与为他们每个人调用Channel.write相同
    猜你喜欢
    • 1970-01-01
    • 2015-04-07
    • 2019-04-29
    • 2017-10-26
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多