Как все мы знаем, когда мы пишем Netty Server, мы обычно называем bossGroup.shutdownGracefully();
в регионе finally. И я смотрю комментарий shutdownGracefully()
, он говорит:
Сигнализирует этого исполнителя, что вызывающая сторона хочет, чтобы исполнитель был выключен.
public final class EchoServer {
static final int PORT = Integer.parseInt(System.getProperty("port", "8007"));
public static void main(String[] args) throws Exception {
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup();
EchoServerHandler echoServerHandler = new EchoServerHandler();
try {
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.option(ChannelOption.SO_BACKLOG, 100)
.handler(new LoggingHandler(LogLevel.INFO))
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline p = ch.pipeline();
p.addLast(new LoggingHandler(LogLevel.INFO));
p.addLast(echoServerHandler);
}
});
ChannelFuture f = serverBootstrap.bind(PORT).sync();
f.channel().closeFuture().sync();
} finally {
// todo, how to here
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
}
Обычно, сервер никогда не перейдет на bossGroup.shutdownGraceFully()
строку, потому что f.channel().closeFuture().sync();
заблокирует основной поток.
Поэтому мой вопрос:
как он может прийти к bossGroup.shutdownGracefully()
line?
или какой сигнал можно отправить для корректного отключения сервера Netty?