2014-07-17 47 views
0

我正在開發一個多人遊戲項目,我對如何設置它有點困惑。主要是因爲我不熟悉Netty框架。網絡設計[使用Netty]

每個玩家都應該擁有自己的Pipe來處理數據包嗎?或者應該只有一個管道來處理所有入站數據包?

如果一個球員應該有自己的數據包,我將如何讓該球員成爲管道的擁有者?

目前,這是我的服務器代碼

public static void main(String[] params) throws Exception 
    { 
     EventLoopGroup bossGroup = new NioEventLoopGroup(1); 
     EventLoopGroup workerGroup = new NioEventLoopGroup(); 
     try 
     { 
      ServerBootstrap bootstrap = new ServerBootstrap(); 
      bootstrap.group(bossGroup, workerGroup) 
       .channel(NioServerSocketChannel.class) 
       .option(ChannelOption.SO_BACKLOG, 100) 
       .handler(new LoggingHandler(LogLevel.DEBUG)) 
       .childHandler(new ChannelInitializer<SocketChannel>() 
      { 
       @Override 
       public void initChannel(SocketChannel channel) throws Exception 
       { 
        ChannelPipeline pipeline = channel.pipeline(); 
        pipeline.addLast(new LoggingHandler(LogLevel.DEBUG)); 
        pipeline.addLast("PacketHandler", new SinglePacketPipe()); 
        System.err.println("Connection Established - Pipes constructed.."); 
       } 
      }); 

      ChannelFuture future = bootstrap.bind(SERVER_PORT).sync(); 
      System.err.println("Server initialized.."); 
      // When the server socket is closed, destroy the future. 
      future.channel().closeFuture().sync(); 
     } 
     finally 
     { 
      // Destroy all executor groups 
      bossGroup.shutdownGracefully(); 
      workerGroup.shutdownGracefully(); 
     } 
    } 

回答

1

根據定義,頻道Netty中總是有自己的管道。也就是說,如果您有1000個連接,則有1000個管道。完全取決於你讓它們在這些管道中擁有相同的一組處理程序,還是讓它們中的一些具有不同的管道配置。

請注意,管道是動態可配置的。您可以決定在initChannel()或您的處理程序的channelRegistered()(甚至是任何處理程序方法)中添加/刪除哪些處理程序。