将Netty4与多个客户端一起使用

时间:2013-10-29 10:48:02

标签: netty

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

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

据我所知,ParentExecutor组将处理任何传入连接并将其传递给Child 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 {

2 个答案:

答案 0 :(得分:1)

子组也称为工作组实际上是由Netty创建的一个线程(在Netty中称为EventLoop)池。默认的NioEventLoopGroup池大小为{{1}}。每当连接到来时,Netty将从子组中安排一个线程(也称为EventLoop)来处理通道和消息传输等等。属于ChannelPipeline的所有处理程序都将在此线程中执行。

答案 1 :(得分:0)

是的,处理程序将在fireChannelRead()执行期间在子线程组中执行