netty中的ServerBootstrap.option()和ServerBootstrap.childOption()有什么区别4.x
What is the difference between ServerBootstrap.option() and ServerBootstrap.childOption() in netty 4.x
根据文档New and noteworthy in 4.0,netty4提供了一个新的bootstrap API,文档给出了以下代码示例:
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();
}
}
代码使用ServerBootStrap.option
设置ChannelOption.SO_BACKLOG
,然后使用ServerBootStrap.childOption
设置ChannelOption.TCP_NODELAY
。
ServerBootStrap.option
和ServerBootStrap.childOption
有什么区别?我怎么知道哪个选项应该是 option
,哪个应该是 childOption
?
What is the difference between ServerBootStrap.option and
ServerBootStrap.childOption?
我们使用 ServerBootStrap.option
设置的参数适用于新创建的 ServerChannel 的 ChannelConfig,即侦听和接受客户端连接的服务器套接字。当调用 bind() 或 connect() 方法时,将在服务器通道上设置这些选项。每个服务器一个频道。
并且 ServerBootStrap.childOption
适用于通道的 channelConfig,它在 serverChannel 接受客户端连接后创建。此通道针对每个客户端(或每个客户端套接字)。
因此 ServerBootStrap.option
参数适用于正在侦听连接的服务器套接字(服务器通道),ServerBootStrap.childOption
参数适用于服务器套接字接受连接后创建的套接字。
同样可以扩展到 attr
vs childAttr
和 handler
vs childHandler
ServerBootstrap
class 中的方法。
How could I know which option should be an option and which should be
a childOption ?
支持哪些 ChannelOptions 取决于我们使用的频道类型。
您可以参考 API 文档了解您正在使用的 ChannelConfig。 http://netty.io/4.0/api/io/netty/channel/ChannelConfig.html 及其子 class。您应该找到每个 ChannelConfig 的 Available Options 部分。
也就是说,ServerBootStrap.option
与bossGroup一起使用,ServerBootStrap.childOption
与workerGroup一起使用。
根据文档New and noteworthy in 4.0,netty4提供了一个新的bootstrap API,文档给出了以下代码示例:
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();
}
}
代码使用ServerBootStrap.option
设置ChannelOption.SO_BACKLOG
,然后使用ServerBootStrap.childOption
设置ChannelOption.TCP_NODELAY
。
ServerBootStrap.option
和ServerBootStrap.childOption
有什么区别?我怎么知道哪个选项应该是 option
,哪个应该是 childOption
?
What is the difference between ServerBootStrap.option and ServerBootStrap.childOption?
我们使用 ServerBootStrap.option
设置的参数适用于新创建的 ServerChannel 的 ChannelConfig,即侦听和接受客户端连接的服务器套接字。当调用 bind() 或 connect() 方法时,将在服务器通道上设置这些选项。每个服务器一个频道。
并且 ServerBootStrap.childOption
适用于通道的 channelConfig,它在 serverChannel 接受客户端连接后创建。此通道针对每个客户端(或每个客户端套接字)。
因此 ServerBootStrap.option
参数适用于正在侦听连接的服务器套接字(服务器通道),ServerBootStrap.childOption
参数适用于服务器套接字接受连接后创建的套接字。
同样可以扩展到 attr
vs childAttr
和 handler
vs childHandler
ServerBootstrap
class 中的方法。
How could I know which option should be an option and which should be a childOption ?
支持哪些 ChannelOptions 取决于我们使用的频道类型。 您可以参考 API 文档了解您正在使用的 ChannelConfig。 http://netty.io/4.0/api/io/netty/channel/ChannelConfig.html 及其子 class。您应该找到每个 ChannelConfig 的 Available Options 部分。
也就是说,ServerBootStrap.option
与bossGroup一起使用,ServerBootStrap.childOption
与workerGroup一起使用。