ServerBootstrap中的handler(ChannelHandler c)和childHandler(ChannelHandler c)有何区别?

7

我是Netty的新手。有一件令我感到困惑的事情是,ServerBootstrap有两个方法:handler(ChannelHandler c)(从AbstractBootstrap继承而来)和childHandler(ChannelHandler c),基于javadoc的描述,这两个方法似乎都在做同样的事情。那么,这是真的吗?这两种方法之间是否有任何区别?

2个回答

8

在写基于 Netty 的客户端时,使用在 AbstractBootstrap 中定义的 handler

在编写能够处理多个已接受通道的基于 Netty 的服务器时,使用一个子处理器来处理已接受通道的 I/O 和数据,通过在 ServerBootstrap 中使用 childHandler 定义。


1
请问您能否详细解释一下您的回答? - raffian

2

Handler方法将在ServerBootstrap初始化时执行,然而childHandler会在连接完成时执行。

b.group(bossGroup, workerGroup)
    .channel(NioServerSocketChannel.class)
    .handler(new LoggingHandler(LogLevel.INFO))
    .childHandler(new ServerInitializer(this.hander));

当您启动服务器时,您可以看到以下日志:
2017-09-20 08:44:34,034 INFO    nioEventLoopGroup-2-1   LoggingHandler:150   [id: 0x920c9647, L:/0:0:0:0:0:0:0:0:6030] ACTIVE
2017-09-20 08:44:34,034 INFO    nioEventLoopGroup-3-1   LoggingHandler:150   [id: 0x048bb39e, L:/0:0:0:0:0:0:0:0:6031] ACTIVE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接