我是Netty的新手。有一件令我感到困惑的事情是,ServerBootstrap有两个方法:handler(ChannelHandler c)(从AbstractBootstrap继承而来)和childHandler(ChannelHandler c),基于javadoc的描述,这两个方法似乎都在做同样的事情。那么,这是真的吗?这两种方法之间是否有任何区别?
在写基于 Netty 的客户端时,使用在 AbstractBootstrap 中定义的 handler
。
在编写能够处理多个已接受通道的基于 Netty 的服务器时,使用一个子处理器来处理已接受通道的 I/O 和数据,通过在 ServerBootstrap 中使用 childHandler
定义。
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