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