netty 4.x中ServerBootstrap.option()和ServerBootstrap.childOption()之间有什么区别

Wei*_* Li 8 java netty

根据4.0中的文档New和值得注意的,netty4提供了一个新的bootstrap API,doc提供了以下代码示例:

public static void main(String[] args) throws Exception {
    // Configure the server.
    EventLoopGroup bossGroup = new NioEventLoopGroup();
    EventLoopGroup workerGroup = new NioEventLoopGroup();
    try {
        ServerBootstrap b = new ServerBootstrap();
        b.group(bossGroup, workerGroup)
         .channel(NioServerSocketChannel.class)
         .option(ChannelOption.SO_BACKLOG, 100)
         .localAddress(8080)
         .childOption(ChannelOption.TCP_NODELAY, true)
         .childHandler(new ChannelInitializer<SocketChannel>() {
             @Override
             public void initChannel(SocketChannel ch) throws Exception {
                 ch.pipeline().addLast(handler1, handler2, ...);
             }
         });

        // Start the server.
        ChannelFuture f = b.bind().sync();

        // Wait until the server socket is closed.
        f.channel().closeFuture().sync();
    } finally {
        // Shut down all event loops to terminate all threads.
        bossGroup.shutdownGracefully();
        workerGroup.shutdownGracefully();

        // Wait until all threads are terminated.
        bossGroup.terminationFuture().sync();
        workerGroup.terminationFuture().sync();
    }
}
Run Code Online (Sandbox Code Playgroud)

代码用于ServerBootStrap.option设置ChannelOption.SO_BACKLOG,然后用于ServerBootStrap.childOption设置ChannelOption.TCP_NODELAY.

ServerBootStrap.option和之间有什么区别ServerBootStrap.childOption?我怎么知道哪个选项应该是option哪个,哪个应该是childOption

Mad*_*apu 8

ServerBootStrap.option和ServerBootStrap.childOption有什么区别?

我们设置的参数ServerBootStrap.option适用于新创建的ServerChannel的ChannelConfig,即侦听和接受客户端连接的服务器套接字.调用bind()或connect()方法时,将在服务器通道上设置这些选项.此通道是每个服务器一个.

并且ServerBootStrap.childOption适用于在serverChannel接受客户端连接后创建的通道的channelConfig.此通道是每个客户端(或每个客户端套接字).

因此,ServerBootStrap.option参数适用于正在侦听连接的服务器套接字(服务器通道),并且ServerBootStrap.childOption参数适用于在服务器套接字接受连接后创建的套接字.

同样可以扩展到类中的attrvs childAttrhandlervs childHandler方法ServerBootstrap.

我怎么知道哪个选项应该是一个选项,哪个应该是childOption?

支持哪种ChannelOptions取决于我们使用的渠道类型.您可以参考您正在使用的ChannelConfig的API文档.http://netty.io/4.0/api/io/netty/channel/ChannelConfig.html及其子类.您应该为每个ChannelConfig 找到" 可用选项"部分.