对多个客户端使用Netty4

对多个客户端使用Netty4,netty,Netty,我正在使用Netty4创建一个需要为多个客户端连接提供服务的服务器。ServerBootstrap由父线程组和工作线程组构成。根据ServerBootStrap.group()方法上的文档 “为父(接受者)和子(客户端)设置EventLoopGroup。这些EventLoopGroup用于处理SocketChannel和Channel的所有事件和IO。” 据我所知,ParentExecutor组将处理任何传入的连接,并将其传递给子Executor组执行。因此,为了服务于许多客户机,我有以下设置

我正在使用Netty4创建一个需要为多个客户端连接提供服务的服务器。ServerBootstrap由父线程组和工作线程组构成。根据ServerBootStrap.group()方法上的文档

“为父(接受者)和子(客户端)设置EventLoopGroup。这些EventLoopGroup用于处理SocketChannel和Channel的所有事件和IO。”

据我所知,ParentExecutor组将处理任何传入的连接,并将其传递给子Executor组执行。因此,为了服务于许多客户机,我有以下设置

final ServerBootstrap serverBootstrap = new ServerBootstrap();
    serverBootstrap.group(new NioEventLoopGroup(), new NioEventLoopGroup(Runtime.getRuntime()
            .availableProcessors() * 3))
    .channel(NioServerSocketChannel.class)
    .childHandler(new MyInitializer());
现在的问题是,我的处理程序中的以下方法是否会在子执行器组上执行。我怀疑它是通过SingleThreadEventExecutor以单线程方式处理的

protected void channelRead0(final ChannelHandlerContext ctx, final AppMessage msg)
        final AppMessage msg) throws Exception {

是的,在fireChannelRead()执行期间,将在子线程组中执行处理程序。子组也称为工作组,实际上是由Netty创建的线程(在Netty中称为EventLoop)池。默认NioEventLoopGroup的池大小为
Runtime.getRuntime().availableProcessors()*2)
。每次连接到来时,Netty都会从子组中安排一个线程(aka,EventLoop)来处理通道和消息传输等。属于ChannelPipeline的所有处理程序都将在此线程中执行