Какие сигналы я могу отправить на корректно выключенный нетти-сервер? - PullRequest
0 голосов
/ 11 февраля 2020

Как все мы знаем, когда мы пишем 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(); заблокирует основной поток.

Поэтому мой вопрос:

  1. как он может прийти к bossGroup.shutdownGracefully() line?

  2. или какой сигнал можно отправить для корректного отключения сервера Netty?

1 Ответ

0 голосов
/ 11 февраля 2020

Зависит от того, когда вы хотите выключить сервер ?? И почему?

Почему бы не создать обработчик для сервера, которому вы можете передать свой класс EchoServer - тогда вы можете настроить сообщение для обращения к методу stop в вашем EchoServer.

Метод stop может затем нажать shutdownGracefully et c.

Вам просто нужно упорядочить код так, чтобы эти части были разбиты на методы, которые вы нажимаете, например запуск / остановка.

В моей реализации метод stop вызывается только тогда, когда код явно вызывает его.

...