簡體   English   中英

網絡設計[使用Netty]

[英]Networking Design [Using Netty]

我正在做一個多人游戲項目,我對如何設置有點困惑。 主要是因為我對Netty框架不熟悉。

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

如果玩家應該擁有自己的數據包,我將如何使其成為管道的所有者?

目前這是我的服務器代碼

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();
        }
    }

根據定義,Netty中的通道始終具有自己的管道。 也就是說,如果您有1000個連接,則有1000個管道。 讓它們在這些管道中具有相同的處理程序集,或者讓其中一些具有不同的管道配置完全取決於您。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM