ServerBootstrap的handler(ChannelHandler c)和childHandler(ChannelHandler c)有什么区别?

时间:2014-10-19 03:12:59

标签: java netty

我是Netty的新手。我发现令人困惑的一件事是ServerBootstrap有两个方法:handler(ChannelHandler c),它继承自AbstractBootstrap,而childHandler(ChannelHandler c),它们似乎都是基于javadoc做同样的事情。那么,这是真的吗?这两种方法之间有什么区别吗?

2 个答案:

答案 0 :(得分:6)

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

当编写基于netty的服务器时,它可以在多个接受的通道上工作,使用子处理程序,通过使用ServerBootstrap中定义的childHandler来处理接受通道的I / O和数据。

答案 1 :(得分:0)

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