2015-08-26 63 views
1

我想弄清楚如何獲得指向我的服務器引導產生的通道的指針。這個想法是我可能以後會做類似在Netty 4中如何獲得從ServerBootStrap子通道的指針

childChannel.write(x); 

這是我目前擁有的代碼。

EventLoopGroup bossGroup = new NioEventLoopGroup(1); 
    EventLoopGroup workerGroup = new NioEventLoopGroup(); 
    try { 
     ServerBootstrap b = new ServerBootstrap(); 
     b.group(bossGroup, workerGroup) 
       .channel(NioServerSocketChannel.class) 
       .childHandler(new ChannelInitializer<SocketChannel>() {      @Override 
        public void initChannel(SocketChannel ch) throws Exception { 
         //ch.pipeline().addLast(new TimeEncoder(),new DiscardServerHandler()); 
         ch.pipeline().addLast(
           new ObjectEncoder(), 
           new ObjectDecoder(ClassResolvers.cacheDisabled(null)), 
           new ObjectEchoServerHandler()); 
        } 
       }); 

     ChannelFuture f = b.bind(port).sync(); 
     //f.channel() returns the NioServerSocketChannel ... not the child 
     //@TODO need child channel...********* 

謝謝!

回答

2

你可以嘗試使用ChannelGroup(見API文檔),例如:

要創建您ServerBootstrap

ChannelGroup allChannels = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); 

你可能會決定更改EventExecutor到workerGroup太前放置。

然後在你的ObjectEchoServerHandler,你的構造可以設置這個通道組

public class ObjectEchoServerHandler extends xxx { 
    ChannelGroup allChannels; 
    public ObjectEchoServerHandler(ChannelGroup allChannels) { 
     this.allChannels = allChannels; 
    } 

    @Override 
    public void channelActive(ChannelHandlerContext ctx) { 
     // closed on shutdown. 
     allChannels.add(ctx.channel()); 
     super.channelActive(ctx); 
    } 
} 

然後你可以使用羣發消息給你想要誰,所有的或特定的一個。

+0

謝謝!按需要工作 – M1LKYW4Y